以太坊互操作性

您可以将基于以太坊的交易包括在原子交易工作流中。

公共区块链和令牌化功能在公共和许可区块链中的使用日益增长,这推动了对其互操作性的需求。常见场景包括跨不同分类账的资产交换、与公共链上的加密货币支付关联的许可区块链上的业务交易、在公共区块链上发布许可区块链交易的证明等。为了实现这些和其他场景的互操作性,Oracle Blockchain Platform 可与以太坊以及任何支持标准 web3 协议的基于 EVM 的网络实现互操作性。互操作性函数的工作原理是将 Geth Ethereum 客户端整合到 REST 代理中,并允许其通过名为 atomicTransactions 的单个 REST API 编排优化的两阶段提交协议,其中包括 Oracle Blockchain Platform 和 Ethereum/EVM 事务。您可以使用 atomicTransactions API 为多个 Oracle Blockchain Platform 渠道发送多个链代码事务处理,还可以根据需要添加一个 Ethereum 事务处理,该事务处理将使用 Oracle Blockchain Platform 事务处理原子运行。

Oracle Blockchain Platform 交易不同,以太坊交易不能分为两阶段提交协议的准备和提交阶段。要将以太坊交易纳入原子工作流,Oracle Blockchain Platform 将使用上次资源提交 (LRC) 优化。在所有 Oracle Blockchain Platform 事务处理都处于准备状态后,以太坊事务处理将启动。如果以太坊交易成功,则提交 Oracle Blockchain Platform 交易。如果以太坊交易失败,则将回退 Oracle Blockchain Platform 交易。

以太坊交易有一个终结概念。以太坊交易可以成功运行,但直到它是无法更改的块的一部分,它才能实现最终。可以使用 finalityParams 参数来控制是否检查最终性以及等待它的时间(以块为单位或以秒为单位)。通常,如果您等待在公共以太坊区块链网络 ( Mainnet ) 上生成六个块,则可以假定实现了交易终结性。在私有的以太坊网络中,通常不需要等待很长时间才能完成。

将 NFT 传输到以太坊网络

atomicTransactions API 还支持与部署在以太坊网络上的智能合约进行交互。您可以使用此功能将 Oracle Blockchain Platform 上的 Hyperledger Fabric 链代码中铸造的非同质代币 (NFT) 传输到以太坊或多边形网络,方法是通过原子调用两个事务处理。令牌 ID、价格和令牌历史记录等 NFT 属性也可以从 Oracle Blockchain Platform 原子地传递到以太坊。将 NFT 从 Oracle Blockchain Platform 转移到以太坊后,可以在公共 NFT 市场中列出 NFT。

要将 NFT 从 Oracle Blockchain Platform 传输到以太坊,您可以在一个原子事务处理中使用两个基本步骤:

  1. Oracle Blockchain Platform 上烧毁 NFT。调用 burnNFT 方法,从 Oracle Blockchain Platform 上的 Hyperledger Fabric 链代码中刻录(删除)NFT。Oracle Blockchain Platform 支持采用区块链应用构建器工具的两个标准的增强版本 ERC-721 和 ERC-1155 的 NFT。有关 burnNFT 方法的更多信息,请参见环境的相关主题:
  2. 在以太坊上铸造 NFT。调用以太坊或多边形网络上的智能合约,使用 burnNFT 方法返回的参数在该网络上铸造 NFT。以下归档文件中提供了以 Solidity 语言为 NFT 编写的智能合同的示例版本: solidity-smartcontracts-fab253.zip 。智能合约(针对每个增强的令牌标准 ERC-721 和 ERC-1155)都包含一个 mintNFT 方法,该方法创建具有自定义属性(例如价格和令牌历史记录)的 NFT,可以在上一步中从 burnNFT 方法的输出中提取。
    对于无符号请求,如果自定义属性在 ParamKeys 参数中,并且相应的动态参数在 params 参数中传递,则原子事务处理 API 可以从 burnNFT 方法提取参数并将其发送到以太坊智能合约。mintNFT 方法采用以下参数:
    • to –将建立 NFT 的帐户的以太坊地址。
    • id-NFT 的标记 ID。
    • price - NFT 的价格。
    • tokenHistoryOracle Blockchain Platform 链代码中的 NFT 历史记录。

    智能合约要求 NFT 的令牌 ID 必须是数字字符串(可以转换为整数的字符串)。例如,令牌 ID 可以是 2,但不能是 token2

    部署在 Oracle Blockchain Platform 上的链代码中 NFT 的标记 URI 必须遵循某种格式,才能使其与 Solidity 智能合约兼容:
    • ERC-1155:依赖于 ID 替代的所有标记类型的 URI,例如 https://token-cdn-domain/{id}.json
    • ERC-721:所有令牌共享一个前缀(基本 URI)后跟一个令牌 URI(如 http://api.myproject.example.com/token/<tokenURI>)的 URI。

    您可以使用 Remix IDE 为智能合约生成应用程序二进制接口 (Application Binary Interface,ABI)。然后,ABI 可以与 atomicTransactions API 一起使用。如果更改智能合同中的任何方法,则必须重新编译合同并重新生成 ABI。

有关在原子工作流中用于以太坊事务的参数(包括将 NFT 传输到以太坊网络的示例)的更多信息,请参见 Atomic Transactions REST Endpoints