打字猴:1.703878839e+09
1703878839 区块链项目开发指南 [:1703875387]
1703878840 区块链项目开发指南 8.2 什么是事件主题
1703878841
1703878842 主题是用来把事件索引化(index)的数值。没有主题,就不能搜索事件。只要调用一个事件,就生成一个默认主题(被视为事件的第一个主题)。一个事件最多可以有四个主题。主题总是按照相同顺序生成。可以使用一个或者多个主题检索事件。
1703878843
1703878844 第一个主题是事件签名。剩下三个主题是索引化的参数数值。如果参数是字符串、字节或者数组,则主题是它的keccak-256哈希。
1703878845
1703878846 下面通过一个例子来帮助读者理解主题的含义。假设有一个事件采用这个形式:
1703878847
1703878848
1703878849
1703878850
1703878851 这里共生成如下四个主题:
1703878852
1703878853 ·0xb62a11697c0f56e93f3957c088d492b505b9edd7fb6e7872a93b41cdb2020644。这是第一个主题,它用web3.sha3(“ping(string,int256,uint256,string,int256)”)生成。可以看到所有类型都采用规范格式。
1703878854
1703878855 ·0x30ee7c926ebaf578d95b278d78bc0cde445887b0638870a26dcab901ba21d3f2。这是第二个主题,它用web3.sha3(“RandomString”)生成。
1703878856
1703878857 ·第三个和第四个主题分别是0x000000000000000000000000000000000000000000000000000000000000000c和0x0000000000000000000000000000000000000000000000000000000000000017,即以十六进制表示的数值。它们分别用EthJS.Util.bufferToHex(EthJS.Util.setLengthLeft(12,32))和EthJS.Util.bufferToHex(EthJS.Util.setLengthLeft(23,32))计算。
1703878858
1703878859 以太坊节点将在内部使用主题创建索引,这样很容易基于签名和索引化的数值找到事件。
1703878860
1703878861 假设想获取前面事件的事件调用,其中第一个实参是Random String,第三个实参是23或者78,则可以用web3.eth.getFilter找到它们:
1703878862
1703878863
1703878864
1703878865
1703878866
1703878867
1703878868
1703878869 所以这里让节点从区块链返回0x853cdcb4af7a6995808308b08bb78a74de1ef899合约地址发出的全部事件,其第一个主题是0xb62a11697c0f56e93f3957c088d492b505b9edd7fb6e7872a93b41cdb2020644,第二个主题是0x30ee7c926ebaf578d95b278d78bc0cde445887b0638870a26dcab901ba21d3f2,第三个主题是0x0000000000000000000000000000000000000000000000000000000000000017或者0x000000000000000000000000000000000000000000000000000000000000004e。
1703878870
1703878871
1703878872 在程序代码中,注意主题数组数值的顺序。顺序很重要。
1703878873
1703878874
1703878875
1703878876
1703878877 区块链项目开发指南 [:1703875388]
1703878878 区块链项目开发指南 8.3 开始使用truffle-contract
1703878879
1703878880 在学习truffle之前,学习truffle-contract很重要,因为truffle-contract与truffle密切相关。Truffle测试、truffle中与合约交互的代码、部署代码等都是使用truffle-contract编写的。
1703878881
1703878882 truffle-contract API是一个JavaScript和Node.js库,它使以太坊智能合约的处理变得容易。到目前为止,我们已经使用了web3.js部署和调用智能合约函数,这没问题,但是truffle-contract的目标是更容易操作以太坊智能合约。下面是truffle-contract的一些功能,这些功能使truffle-contract在处理智能合约时优于web3.js:
1703878883
1703878884 ·同步交易,优化了控制流(交易在直到确定被挖出之前都不会停止)。
1703878885
1703878886 ·基于约定的API。再没有“回调地狱”。在ES6和async/await上都可以用。
1703878887
1703878888 ·默认交易数值,例如from address或者gas。
[ 上一页 ]  [ :1.703878839e+09 ]  [ 下一页 ]