以太坊互操作性

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

在公共区块链和许可区块链中越来越多地使用公共区块链和令牌化功能,这就需要它们的互操作性。常见的场景包括跨不同账本的资产交换、与公共链上的加密货币支付关联的许可区块链上的业务交易、在公共区块链上发布许可区块链交易的证明等。为了实现这些场景和其他场景的互操作性,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 上的 Hyperledger Fabric 链代码中铸造的不可换代币 (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 通过区块链应用构建器工具,在 ERC-721 和 ERC-1155 这两个标准的增强版本中支持 NFT。有关 burnNFT 方法的更多信息,请参阅 Blockchain App Builder for Oracle Blockchain Platform 中的相关主题:
  2. 在以太坊上铸造 NFT。在以太坊或多边形网络上调用智能合约,使用 burnNFT 方法返回的参数在该网络上模拟 NFT。以下归档文件中提供了以 NFT 的 Solidity 语言编写的智能合同示例版本: 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(如 http://api.myproject.example.com/token/<tokenURI>)的 URI。

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

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