1. 程式人生 > >web3.js_1.x.x--API(一)event/Constant/deploy/options

web3.js_1.x.x--API(一)event/Constant/deploy/options

/*
事件是使用EVM日誌內建功能的方便工具,在DAPP的介面中,它可以反過來呼叫Javascript的監聽事件的回撥。

事件在合約中可被繼承。當被呼叫時,會觸發引數儲存到交易的日誌中(一種區塊鏈上的特殊資料結構)。
這些日誌與合約的地址關聯,併合併到區塊鏈中,只要區塊可以訪問就一直存在
*/

myContract.once(event[, options], callback) //單次訂閱合約事件
myContract.events.MyEvent([options][, callback])  //訂閱合約事件
myContract.events.allEvents([options][, callback]) //
訂閱合約全部事件 myContract.getPastEvents(event[, options][, callback]) //讀取合約歷史事件 options - Object: 可選,用於部署的選項,包含以下欄位: filter - Object : 可選,按索引引數過濾事件。例如 {filter: {myNumber: [12,13]}} 表示 “myNumber” 為12或13的所有事件 fromBlock - Number: 可選,僅監聽該選項指定編號的塊中發生的事件 topics - Array : 可選,用來手動為事件過濾器設定主題。如果設定過filter屬性和事件簽名,那麼(topic[0])將不會自動設定 callback
- Function: 可選,該回調函式觸發時,其第二給引數為事件物件,第一個引數為錯誤物件 底層的日誌介面(Low-level Interface to Logs) 通過函式log0,log1,log2,log3,log4,可以直接訪問底層的日誌元件。logi表示總共有帶i + 1個引數 log3( msg.value, 0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20, msg.sender, _id );
呼叫:
    myContract.deploy(options)
引數:
options 
- Object: 用於部署的配置選項,包含以下欄位: data - String: 合約的位元組碼 arguments - Array : 可選,在部署時將傳入合約的建構函式 返回值: Object: 交易物件,包含以下欄位: arguments: Array - 之前傳入方法的引數,可修改 send: Function - 用來部署合約,其返回的promise物件將解析為新的合約例項,而非交易收據! estimateGas: Function - 用來估算用於部署的gas用量 encodeABI: Function - 用來編碼部署的ABI資料,即合約資料 + 建構函式引數 myContract.deploy({ data: '0x12345...', arguments: [123, 'My String'] }) .send({ from: '0x1234567890123456789012345678901234567891', gas: 1500000, gasPrice: '30000000000000' }, function(error, transactionHash){ ... }) .on('error', function(error){ ... }) .on('transactionHash', function(transactionHash){ ... }) .on('receipt', function(receipt){ console.log(receipt.contractAddress) // 收據中包含了新的合約地址 }) .on('confirmation', function(confirmationNumber, receipt){ ... }) .then(function(newContractInstance){ console.log(newContractInstance.options.address) // 新地址的合約例項 }); // data是合約自身的一個可選配置項 myContract.options.data = '0x12345...'; myContract.deploy({ arguments: [123, 'My String'] }) .send({ from: '0x1234567890123456789012345678901234567891', gas: 1500000, gasPrice: '30000000000000' }) .then(function(newContractInstance){ console.log(newContractInstance.options.address) // instance with the new contract address }); // 編碼 myContract.deploy({ data: '0x12345...', arguments: [123, 'My String'] }) .encodeABI(); > '0x12345...0000012345678765432' // 估算gas myContract.deploy({ data: '0x12345...', arguments: [123, 'My String'] }) .estimateGas(function(err, gas){ console.log(gas); });
/*
new web3.eth.Contract(jsonInterface[, address][, options])
引數:

jsonInterface(abi) - Object: 要例項化的合約的json介面
address - String: 可選,要呼叫的合約的地址,也可以在之後使用 myContract.options.address = '0x1234..' 來指定該地址
options - Object : 可選,合約的配置物件,其中某些欄位用作呼叫和交易的回撥:
    from - String: 交易傳送方地址
    gasPrice - String: 用於交易的gas價格,單位:wei
    gas - Number: 交易可用的最大gas量,即gas limit
    data - String: 合約的位元組碼,部署合約時需要
*/
truffle(develop)> tokenContract.options
    { address: [Getter/Setter], jsonInterface: [Getter/Setter] }
truffle(develop)> tokenContract.options.jsonInterface[1]
    { constant: false,
      inputs:
       [ { name: '_from', type: 'address' },
         { name: '_to', type: 'address' },
         { name: '_value', type: 'uint256' } ],
      name: 'transferFrom',
      outputs: [ { name: '', type: 'bool' } ],
      payable: false,
      stateMutability: 'nonpayable',
      type: 'function',
      signature: '0x23b872dd' }