以太坊互操作性

您可以在原子事务处理工作流中包括基于以太坊的事务处理。

在公共和许可区块链中越来越多地使用公共区块链和令牌化功能,这推动了对它们互操作性的需求。常见的情况包括不同分类账之间的资产交换,许可区块链上的业务交易,这些区块链与公共链上的加密货币支付有关,在公共区块链上发布许可区块链交易的证明,等等。为了实现这些场景和其他场景的互操作性,Oracle Blockchain Platform 可与以太坊以及支持标准 web3 协议的任何基于 EVM 的网络实现互操作性。互操作性函数的工作原理是将 Geth Ethereum 客户端整合到 REST 代理中,并使其能够通过一个名为 atomicTransactions 的单个 REST API 来编排优化的两阶段提交协议,该协议包括 Oracle Blockchain Platform 和 Ethereum/EVM 事务。您可以使用 atomicTransactions API 为多个 Oracle Blockchain Platform 渠道发送多个链代码事务处理,并且可以选择添加一个以太坊事务处理,该事务处理将通过 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 上的超级账本架构链代码中铸造的非可替换令牌 (NFT) 传输到以太坊或多边形网络。NFT 属性(如令牌 ID、价格和令牌历史记录)也可以从 Oracle Blockchain Platform 以原子方式传递到以太坊。将 NFT 从 Oracle Blockchain Platform 转移到以太坊后,NFT 可在公共 NFT 市场中列出。

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

  1. Oracle Blockchain Platform 上烧毁 NFT。调用 burnNFT 方法,从 Oracle Blockchain Platform 上的超级账本架构链代码中刻录(删除)NFT。Oracle Blockchain Platform 使用 Blockchain App Builder 工具,在增强版 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 的价格。
    • tokenHistory - Oracle 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),后跟一个令牌 URI,例如 http://api.myproject.example.com/token/<tokenURI>

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

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