以太坊互操作性
您可以将基于以太坊的交易包括在原子交易工作流中。
公共区块链和令牌化功能在公共和许可区块链中的使用日益增长,这推动了对其互操作性的需求。常见场景包括跨不同分类账的资产交换、与公共链上的加密货币支付关联的许可区块链上的业务交易、在公共区块链上发布许可区块链交易的证明等。为了实现这些和其他场景的互操作性,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 传输到以太坊,您可以在一个原子事务处理中使用两个基本步骤:
- 在 Oracle Blockchain Platform 上烧毁 NFT。调用
burnNFT
方法,从 Oracle Blockchain Platform 上的 Hyperledger Fabric 链代码中刻录(删除)NFT。Oracle Blockchain Platform 支持采用区块链应用构建器工具的两个标准的增强版本 ERC-721 和 ERC-1155 的 NFT。有关 burnNFT 方法的更多信息,请参见环境的相关主题: - 在以太坊上铸造 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(如
http://api.myproject.example.com/token/<tokenURI>
)的 URI。
您可以使用 Remix IDE 为智能合约生成应用程序二进制接口 (Application Binary Interface,ABI)。然后,ABI 可以与
atomicTransactions
API 一起使用。如果更改智能合同中的任何方法,则必须重新编译合同并重新生成 ABI。
有关在原子工作流中用于以太坊事务的参数(包括将 NFT 传输到以太坊网络的示例)的更多信息,请参见 Atomic Transactions REST Endpoints 。