3.1 web3.js at version 0.2x.x

Web3 JavaScript app API for 0.2x.x

本文基本上是翻譯自 JavaScript API。但是補(bǔ)充了詳細(xì)的實(shí)例代碼。

注意:這些文檔適用于 web3.js 版本 0.2x.x。如果使用的是 web3.js 1.0,請參閱此文檔。要使應(yīng)用程序在以太坊上運(yùn)行,可以使用 web3.js 庫 提供的 web3 對象。在此基礎(chǔ)上,它通過 RPC 調(diào)用 與本地節(jié)點(diǎn)通信。 web3.js 適用于暴露 RPC 層的任何以太坊節(jié)點(diǎn)。 web3 包含 eth 對象 - web3.eth(特別是以太坊區(qū)塊鏈交互)和 shh 對象 - web3.shh(用于 Whisper 交互)。隨著時(shí)間的推移,我們將為每個(gè)其他 web3 協(xié)議引入其他對象。可以在這里找到工作示例。如果想使用 web3.js 查看一些更復(fù)雜的示例,請查看這些有用的應(yīng)用程序模式。

1. 開始

1.1 安裝 web3

首先,需要將 web3.js 放入項(xiàng)目中。這可以使用以下方法完成:

  • npm: npm install web3 or npm install web3@0.20.6 or npm install web3@0.20.6 --save
  • vanilla: 鏈接 dist./web3.min.js 然后需要?jiǎng)?chuàng)建一個(gè) web3 實(shí)例,設(shè)置一個(gè)提供者。要確保在 mist 中時(shí)不覆蓋已設(shè)置的 provider,請首先檢查 web3 是否可用:
if (typeof web3 !== 'undefined') {
    web3 = new Web3(web3.currentProvider);
} else {
    // set the provider you want from Web3.providers
    web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}

之后,可以使用 web3 對象的 API。這實(shí)際上是監(jiān)控 coinbase 最新余額的示例,見我們的 github 倉庫

1.2 使用回調(diào)

由于此 API 旨在與本地 RPC 節(jié)點(diǎn)一起使用,因此默認(rèn)情況下其所有函數(shù)都使用同步 HTTP 請求。如果要進(jìn)行異步請求,可以將可選回調(diào)作為最后一個(gè)參數(shù)傳遞給大多數(shù)函數(shù)。所有回調(diào)都使用錯(cuò)誤的第一個(gè)回調(diào)樣式

web3.eth.getBlock(48, function(error, result){
   if(!error)
       console.log(JSON.stringify(result));
   else
       console.error(error);
})

1.3 批處理請求

批處理請求允許排隊(duì)請求并一次性處理它們。注意批量請求不會更快!實(shí)際上,在某些情況下,一次性地發(fā)出許多請求會更快,因?yàn)檎埱笫钱惒教幚淼?。批處理請求主要用于確保請求的串行處理。

var batch = web3.createBatch();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(web3.eth.contract(abi).at(address).balance.request(address, callback2));
batch.execute();
var Web3 = require('web3');
var web3 = new Web3();

var rpcUrl = "http://localhost:7545";

web3.setProvider(new web3.providers.HttpProvider(rpcUrl));

console.log('Test batch requests.')

var batch = web3.createBatch();

batch.add(web3.eth.getBlock.request(0, function(error, result) {
    if(!error) {
        console.log('\nresult: ', result);
        // console.log(JSON.stringify(result));
    }
    else {
        console.error(error);
    }
}));

batch.add(web3.eth.getBlock.request(1, function(error, result) {
    if(!error) {
        console.log('\nresult: ', result);
        // console.log(JSON.stringify(result));
    }
    else {
        console.error(error);
    }
}));

batch.add(web3.eth.getBlock.request(2, function(error, result) {
    if(!error) {
        console.log('\nresult: ', result);
        // console.log(JSON.stringify(result));
    }
    else {
        console.error(error);
    }
}));

batch.execute();

1.4 關(guān)于web3.js中大數(shù)字的說明

我們將始終獲得數(shù)字值的BigNumber對象,因?yàn)镴avaScript無法正確處理大數(shù)字。請看以下示例:

"101010100324325345346456456456456456456"
// "101010100324325345346456456456456456456"
101010100324325345346456456456456456456
// 1.0101010032432535e+38

web3.js取決于BigNumber庫并自動(dòng)添加它。實(shí)踐下來,有時(shí)候還是需要手動(dòng)安裝 `npm install bignumber.js'

var balance = new BigNumber('131242344353464564564574574567456');
// or var balance = web3.eth.getBalance(someAddress);
balance.plus(21).toString(10); // toString(10) converts it to a number string
// "131242344353464564564574574567477"

下一個(gè)示例不起作用,因?yàn)槲覀冇谐^20個(gè)浮點(diǎn),因此建議始終在wei中保持余額,并在呈現(xiàn)給用戶時(shí)僅將其轉(zhuǎn)換為其他單位:

var balance = new BigNumber('13124.234435346456466666457455567456');
 balance.plus(21).toString(10); // toString(10) converts it to a number string, but can only show upto 20 digits
// "13145.23443534645646666646" // your number will be truncated after the 20th digit

2. Web3.js API Reference

2.1 web3

web3對象提供了所有的方法。

示例:

var Web3 = require('web3');
// create an instance of web3 using the HTTP provider.
// NOTE in mist web3 is already available, so check first if it's available before instantiating
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

使用HTTP基本身份驗(yàn)證的示例

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545", 0, BasicAuthUsername, BasicAuthPassword));
//Note: HttpProvider takes 4 arguments (host, timeout, user, password)

2.2 version

2.2.1 api

接口:

web3.version.api

返回值:

String - 以太坊js api版本。

示例:
var version = web3.version.api;
console.log(version); // "0.2.0"

2.2.2 node/getNode

接口:

web3.version.node

web3.version.node
// or async
web3.version.getNode(callback(error, result){ ... })
返回值:

String - client/node 版本。

示例:

var version = web3.version.node;
console.log(version); // "Mist/v0.9.3/darwin/go1.4.1"

2.2.3 network/getNetwork

接口:

web3.version.network

web3.version.network
// or async
web3.version.getNetwork(callback(error, result){ ... })
返回值:

String - 網(wǎng)絡(luò)ID。

示例:
var version = web3.version.network;
console.log(version); // 54

2.2.4 ethereum/getEthereum

接口:

web3.version.ethereum

web3.version.ethereum
// or async
web3.version.getEthereum(callback(error, result){ ... })

返回值:
String - 以太坊協(xié)議版本

示例:

var version = web3.version.ethereum;
console.log(version); // 60

2.2.5 whisper/getWhisper

接口:

web3.version.whisper

web3.version.whisper
// or async
web3.version.getWhisper(callback(error, result){ ... })
返回值:

String - whisper 協(xié)議版本

示例:
var version = web3.version.whisper;
console.log(version); // 20

2.3 isConnected()

接口:

web3.isConnected

web3.isConnected()

應(yīng)調(diào)用以檢查是否存在與節(jié)點(diǎn)的連接。

參數(shù):

none

返回值

Boolean

示例:

if(!web3.isConnected()) {
 
  // show some dialog to ask the user to start a node
} else {

  // start web3 filters, calls, etc
 
}

2.4 setProvider(provider)

接口:

web3.setProvider

 web3.setProvider(provider)
參數(shù):

none

返回值

undefined

示例:

web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); // 8080 for cpp/AZ, 8545 for go/mist

2.5 currentProvider

接口:

web3.currentProvider

web3.currentProvider

將包含當(dāng)前 provider(如果已設(shè)置)。這可以用于檢查 mist 等是否已經(jīng)設(shè)置了 provider。

返回值:

Object - provider 集合或 null

示例:
// Check if mist etc. already set a provider
if(!web3.currentProvider)
   web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));

2.6 reset()

接口:

web3.reset

web3.reset(keepIsSyncing)

應(yīng)調(diào)用重置web3的狀態(tài)。重置除經(jīng)理以外的一切。卸載所有過濾器。停止 polling。

參數(shù):
  1. Boolean - 如果為 true,它將卸載所有過濾器,但將保留web3.eth.isSyncing()輪詢
返回值:

undefined

示例:
web3.reset();

2.7 sha3(string, options)

接口:

web3.sha3

web3.sha3(string [, options])
參數(shù):
  1. String - 要使用Keccak-256 SHA3算法進(jìn)行哈希處理的字符串
  2. Object - (可選)如果要散列的字符串以十六進(jìn)制編碼,則將 encoding 設(shè)置為 hex。前導(dǎo)0x將自動(dòng)被忽略。
返回值:

String - 給定數(shù)據(jù)的Keccak-256 SHA3。

示例:
var hash = web3.sha3("Some string to be hashed");
console.log(hash); // "0xed973b234cf2238052c9ac87072c71bcf33abc1bbd721018e0cca448ef79b379"
var hashOfHash = web3.sha3(hash, {encoding: 'hex'});
console.log(hashOfHash); // "0x85dd39c91a64167ba20732b228251e67caed1462d4bcf036af88dc6856d0fdcc"

2.8 toHex(stringOrNumber)

接口:

web3.toHex

web3.toHex(mixed);

將任何值轉(zhuǎn)換為HEX。

參數(shù):
  1. String|Number|Object|Array|BigNumber - 要解析為HEX的值。如果它是一個(gè)對象或數(shù)組,它將首先是JSON.stringify。如果它是一個(gè)BigNumber,它將使它成為數(shù)字的HEX值。
返回值:

String - mixed 的十六進(jìn)制字符串。

示例:
var str = web3.toHex({test: 'test'});
console.log(str); // '0x7b2274657374223a2274657374227d'

2.9 toAscii(hexString)

接口:

web3.toAscii

web3.toAscii(hexString);

將HEX字符串轉(zhuǎn)換為ASCII字符串。

參數(shù):
  1. String - 要轉(zhuǎn)換為ascii的HEX字符串。
示例:
var str = web3.toAscii("0x657468657265756d000000000000000000000000000000000000000000000000");
console.log(str); // "ethereum"

2.10 fromAscii(textString)

接口:

web3.fromAscii

web3.fromAscii(string);

將任何ASCII字符串轉(zhuǎn)換為HEX字符串。

參數(shù):
  1. String - 要轉(zhuǎn)換為HEX的ASCII字符串。
返回值:

String - 轉(zhuǎn)換后的HEX字符串。

示例:
var str = web3.fromAscii('ethereum');
console.log(str); // "0x657468657265756d"

2.11 toDecimal(hexString)

接口:

web3.toDecimal

web3.toDecimal(hexString);

將HEX字符串轉(zhuǎn)換為其數(shù)字表示形式。

參數(shù):
  1. String - 要轉(zhuǎn)換為數(shù)字的HEX字符串。

返回值:
Number - 表示數(shù)據(jù) hexString 的數(shù)字。

示例:
var number = web3.toDecimal('0x15');
console.log(number); // 21

2.12 fromDecimal(number)

接口:

web3.fromDecimal

web3.fromDecimal(number);

將數(shù)字或數(shù)字字符串轉(zhuǎn)換為其HEX表示。

參數(shù):
  1. Number|String - 要轉(zhuǎn)換為HEX字符串的數(shù)字。
返回值:

Number - 表示給定 number 的HEX字符串。

示例:
var value = web3.fromDecimal('21');
console.log(value); // "0x15"

2.13 fromWei(numberStringOrBigNumber, unit)

接口:

web3.fromWei

web3.fromWei(number, unit)

將多個(gè)wei轉(zhuǎn)換為以下以太坊單位:

  • Gwei
  • Kwei
  • Mwei / babbage / ether / femtoether
  • ether
  • finney / gether / grand / gwei
  • kether / kwei / lovelace / mether / micro
  • microether / milli / milliether
  • mwei / nano/ nanoether
  • noether
  • picoether / shannon
  • szabo
  • tether
  • wei
參數(shù):
  1. Number|String|BigNumber - 數(shù)字或BigNumber實(shí)例。
  2. String - 以上以太的單位之一。
返回值:

String|Number - 它是一個(gè)數(shù)字字符串,或一個(gè)BigNumber實(shí)例,具體取決于給定的 number 參數(shù)。

示例:
var value = web3.fromWei('21000000000000', 'finney');
console.log(value); // "0.021"

2.14 toWei(numberStringOrBigNumber, unit)

接口:
web3.toWei

web3.toWei(number, unit)

將以太坊單位轉(zhuǎn)換為wei??赡艿膯挝皇牵?/p>

  • kwei / ada
  • mwei / babbage
  • gwei / shannon
  • szabo
  • finney
  • ether
  • kether / grand / einstein
  • mether
  • gether
  • tether
參數(shù):
  1. Number|String|BigNumber - 數(shù)字或BigNumber實(shí)例。
  2. String - 以上以太的單位之一。
返回值:

String|Number - 它是一個(gè)數(shù)字字符串,或一個(gè)BigNumber實(shí)例,具體取決于給定的 number 參數(shù)。

示例:
var value = web3.toWei('1', 'ether');
console.log(value); // "1000000000000000000"

2.15 toBigNumber(numberOfHexString)

接口:

web3.toBigNumber

web3.toBigNumber(numberOrHexString);

將給定數(shù)字轉(zhuǎn)換為 BigNumber 實(shí)例。請參閱 BigNumber 上的注釋。

參數(shù):
  1. Number|String - 數(shù)字、數(shù)字字符串或HEX字符串的數(shù)字。
返回值:

BigNumber - 表示給定值的 BigNumber 實(shí)例。

示例:
var value = web3.toBigNumber('200000000000000000000001');
console.log(value); // instanceOf BigNumber
console.log(value.toNumber()); // 2.0000000000000002e+23
console.log(value.toString(10)); // '200000000000000000000001'

2.16 isAddress(hexString)

接口:
web3.isAddress

web3.isAddress(HexString);

檢查給定的字符串是否是地址。

參數(shù):
  1. String - HEX字符串。
返回值:

Boolean - 如果它不是有效的地址格式,則為 false。如果它是全小寫或全部大寫有效地址,則返回 true。如果它是一個(gè)混合大小寫的地址,則使用 web3.isChecksumAddress() 進(jìn)行檢查。

示例:

var isAddress = web3.isAddress("0x8888f1f195afa192cfee860698584c030f4c9db1");
console.log(isAddress); // true

2.17 net

2.17.1 listening/getListening

接口:

web3.net.listening

web3.net.listening
// or async
web3.net.getListening(callback(error, result){ ... })

此屬性是只讀的,表示節(jié)點(diǎn)是否正在主動(dòng)偵聽網(wǎng)絡(luò)連接。

返回值:

Boolean - 如果客戶端正在主動(dòng)偵聽網(wǎng)絡(luò)連接,則為 true,否則為 false

示例:
var listening = web3.net.listening;
console.log(listening); // true of false

2.17.2 peerCount/getPerrCount

接口:
web3.net.peerCount

web3.net.peerCount
// or async
web3.net.getPeerCount(callback(error, result){ ... })

此屬性是只讀的,并返回已連接的對等方的數(shù)量。

返回值:

Number - 當(dāng)前連接到客戶端的對等方數(shù)量。

示例:
var peerCount = web3.net.peerCount;
console.log(peerCount); // 4

2.18 eth

包含以太坊區(qū)塊鏈相關(guān)方法。

示例:
var eth = web3.eth;

2.18.1 defaultAccount

接口:

web3.eth.defaultAccount

web3.eth.defaultAccount

此默認(rèn)地址用于以下方法(可選擇通過指定 from 屬性覆蓋它):

  • web3.eth.sendTransaction()
  • web3.eth.call()
值:

String, 20 字節(jié) - 我們擁有的任何地址,或我們擁有私鑰的地址。默認(rèn)值 undefined。

返回值:

String, 20 字節(jié) - 當(dāng)前設(shè)置的默認(rèn)地址。

示例:
var defaultAccount = web3.eth.defaultAccount;
console.log(defaultAccount); // ''
// set the default account
web3.eth.defaultAccount = '0x8888f1f195afa192cfee860698584c030f4c9db1';

2.18.2 defaultBlock

接口:

web3.eth.defaultBlock

web3.eth.defaultBlock

此默認(rèn)塊用于以下方法(可選擇通過傳遞 defaultBlock 參數(shù)來覆蓋它):

  • web3.eth.getBalance()
  • web3.eth.getCode()
  • web3.eth.getTransactionCount()
  • web3.eth.getStorageAt()
  • web3.eth.call()
  • contract.myMethod.call()
  • contract.myMethod.estimateGas()
值:

默認(rèn)塊參數(shù)可以是以下之一:

  • Number - 一個(gè)區(qū)塊號
  • String - "earliest", 創(chuàng)世區(qū)塊
  • String - "latest", 最新的塊(區(qū)塊鏈的當(dāng)前區(qū)塊)
  • String - "pending", 當(dāng)前挖掘的塊(包括待處理的交易)默認(rèn)是最新的
返回值:

Number|String, 查詢狀態(tài)時(shí)使用的默認(rèn)區(qū)塊編號。

示例:
var defaultBlock = web3.eth.defaultBlock;
console.log(defaultBlock); // 'latest'
// set the default block
web3.eth.defaultBlock = 231;

2.18.3 syncing/getSyncing

接口:
web3.eth.syncing

web3.eth.syncing
// or async
web3.eth.getSyncing(callback(error, result){ ... })

此屬性是只讀的,并在節(jié)點(diǎn)同步或返回 false 時(shí)返回同步對象。

返回值:
Object|Boolean - 當(dāng)節(jié)點(diǎn)當(dāng)前正在同步或假時(shí),同步對象如下:

  • startingBlock: Number - 同步開始的區(qū)塊編號。
  • currentBlock: Number - 區(qū)塊編號,節(jié)點(diǎn)當(dāng)前已同步到哪個(gè)區(qū)塊。
  • highestBlock: Number - 要同步的預(yù)期區(qū)塊編號。

示例:

var sync = web3.eth.syncing;
console.log(sync);
/*
{
  startingBlock: 300,
  currentBlock: 312,
  highestBlock: 512
}
*/

2.18.4 isSyncing

接口:

web3.eth.isSyncing

web3.eth.isSyncing(callback);

每次同步開始,更新和停止時(shí),此便捷功能都會調(diào)用回調(diào)。

返回值:

Object - 一個(gè) isSyncing 對象,具有以下方法:

  • syncing.addCallback(): 添加另一個(gè)回調(diào),當(dāng)節(jié)點(diǎn)啟動(dòng)或停止同步時(shí)將調(diào)用該回調(diào)。
  • syncing.stopWatching(): 停止同步回調(diào)。

回調(diào)返回值

  • Boolean - 當(dāng)同步開始時(shí),回調(diào)將被觸發(fā)為 true,而當(dāng)它停止時(shí),回調(diào)將被觸發(fā)。
  • Object - 同步時(shí)它將返回同步對象:
    • startingBlock: Number - 同步開始的區(qū)塊編號。
    • currentBlock: Number - 區(qū)塊編號,節(jié)點(diǎn)當(dāng)前已同步到哪個(gè)區(qū)塊。
    • highestBlock: Number - 要同步的預(yù)期區(qū)塊編號。
示例:
web3.eth.isSyncing(function(error, sync){
   if(!error) {
       // stop all app activity
       if(sync === true) {
          // we use `true`, so it stops all filters, but not the web3.eth.syncing polling
          web3.reset(true);
       
       // show sync info
       } else if(sync) {
          console.log(sync.currentBlock);
       
       // re-gain app operation
       } else {
           // run your app init function...
       }
   }
});

2.18.5 coinbase/getCoinbase

接口:

web3.eth.coinbase

web3.eth.coinbase
// or async
web3.eth.getCoinbase(callback(error, result){ ... })

此屬性是只讀的,并返回采礦獎(jiǎng)勵(lì)所在的 coinbase 地址。

返回值:

String - 客戶的 coinbase 地址。

示例:
var coinbase = web3.eth.coinbase;
console.log(coinbase); // "0x407d73d8a49eeb85d32cf465507dd71d507100c1"

2.18.6 hashrate/getHashrate

接口:

web3.eth.hashrate

web3.eth.hashrate
// or async
web3.eth.getHashrate(callback(error, result){ ... })

此屬性是只讀的,并返回節(jié)點(diǎn)挖掘的每秒哈希數(shù)。

返回值:

Number - 每秒哈希數(shù)。

示例:
var hashrate = web3.eth.hashrate;
console.log(hashrate); // 493736

2.18.7 gasPrice/getGasPrice

接口:

web3.eth.gasPrice

web3.eth.gasPrice
// or async
web3.eth.getGasPrice(callback(error, result){ ... })

此屬性為只讀并返回當(dāng)前的 gas 價(jià)格。gas 價(jià)格由 x 個(gè)最新區(qū)塊中位數(shù) gas 價(jià)格決定。

返回值:

Number - 以 Wei 為單位的當(dāng)前 gas 價(jià)格的 BigNumber 實(shí)例。請參閱 BigNumber 上的注釋。

示例:
var gasPrice = web3.eth.gasPrice;
console.log(gasPrice.toString(10)); // "10000000000000"

2.18.8 accounts/getAccounts

接口:

web3.eth.accounts

web3.eth.accounts
// or async
web3.eth.getAccounts(callback(error, result){ ... })

此屬性是只讀的,并返回節(jié)點(diǎn)控制的帳戶列表。

返回值:

Array - 由客戶端控制的地址數(shù)組。

示例:
var accounts = web3.eth.accounts;
console.log(accounts); // ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] 

2.18.9 mining/getMining

接口:

web3.eth.mining

web3.eth.mining
// or async
web3.eth.getMining(callback(error, result){ ... })

此屬性是只讀的,并說明節(jié)點(diǎn)是否正在挖礦中。

返回值:

Boolean - 如果客戶端正在挖礦,則為 true,否則為 false。

示例:
var mining = web3.eth.mining;
console.log(mining); // true or false

2.18.10 blockNumber/getBlockNumber

接口:

web3.eth.blockNumber

web3.eth.blockNumber
// or async
web3.eth.getBlockNumber(callback(error, result){ ... })

此屬性是只讀的,并返回當(dāng)前區(qū)塊編號。

返回值:

Number - 最近區(qū)塊的編號。

示例:
var number = web3.eth.blockNumber;
console.log(number); // 2744

2.18.11 register(hexString) (Not implemented yet)

接口:

web3.eth.register

web3.eth.register(addressHexString [, callback])

(尚未實(shí)現(xiàn))注冊要包含在 web3.eth.accounts 中的給定地址。這允許非私有密鑰擁有的帳戶被關(guān)聯(lián)為擁有帳戶(例如,合約錢包)。

參數(shù):
  1. String - 要注冊的地址
  2. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

?

示例:
web3.eth.register("0x407d73d8a49eeb85d32cf465507dd71d507100ca")

2.18.12 unRegister(hexString) (Not implemented yet)

接口:
web3.eth.unRegister

web3.eth.unRegister(addressHexString [, callback])

(尚未實(shí)施)取消注冊給定地址。

參數(shù):
  1. String - 要取消注冊的地址
  2. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

?

示例:
web3.eth.unregister("0x407d73d8a49eeb85d32cf465507dd71d507100ca")

2.18.13 getBalance(address)

接口:

web3.eth.getBalance

web3.eth.getBalance(addressHexString [, defaultBlock] [, callback])

獲取給定區(qū)塊的地址余額。

參數(shù):
  1. String - 獲得余額的地址。
  2. Number|String - (可選)如果傳遞此參數(shù),則不會使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊。
  3. Function - 方法 - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信
返回值:

String - wei 中給定地址的當(dāng)前余額的 BigNumber 實(shí)例。請參閱 BigNumber 上的注釋。

示例:
var balance = web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1");
console.log(balance); // instanceof BigNumber
console.log(balance.toString(10)); // '1000000000000'
console.log(balance.toNumber()); // 1000000000000

2.18.14 getStorageAt(address, position)

接口:

web3.eth.getStorageAt

web3.eth.getStorageAt(addressHexString, position [, defaultBlock] [, callback])

將存儲空間放在地址的特定位置。

參數(shù):
  1. String - 從中獲取存儲的地址。
  2. Number - 存儲的索引位置。
  3. Number|String - (可選)如果傳遞此參數(shù),則不會使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊。
  4. Function - 方法 - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信
返回值:

String - 給定位置的存儲值。

示例:
var state = web3.eth.getStorageAt("0x407d73d8a49eeb85d32cf465507dd71d507100c1", 0);
console.log(state); // "0x03"

2.18.15 getCode(address)

接口:

web3.eth.getCode

web3.eth.getCode(addressHexString [, defaultBlock] [, callback])

獲取特定地址的代碼。

參數(shù):
  1. String - 從中獲取代碼的地址。
  2. Number|String - (可選)如果傳遞此參數(shù),則不會使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊。
  3. Function - 方法 - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信
返回值:

String - 給定地址 addressHexString 的數(shù)據(jù)。

示例:
var code = web3.eth.getCode("0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8");
console.log(code); // "0x600160008035811a818181146012578301005b601b6001356025565b8060005260206000f25b600060078202905091905056"

2.18.16 getBlock(hash/number)

接口:

web3.eth.getBlock

web3.eth.getBlock(blockHashOrBlockNumber [, returnTransactionObjects] [, callback])

返回與區(qū)塊編號或塊哈希匹配的區(qū)塊。

參數(shù):
  1. String|Number - 區(qū)塊號或散列。或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”,“l(fā)atest” 或 “pending”。
  2. Boolean - (可選,默認(rèn)為 false)如果為 true,則返回的區(qū)塊將包含所有事務(wù)作為對象,如果為 false,則僅包含交易哈希。
  3. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信
返回值:

Object - 區(qū)塊對象:

  • number: Number - 區(qū)塊號。其掛起塊時(shí)為 null
  • hash: String, 32 Bytes - 區(qū)塊的哈希值。其掛起塊時(shí)為 null。
  • parentHash: String, 32 Bytes - 父區(qū)塊的哈希值。
  • nonce: String, 8 Bytes - 生成的工作證明的哈希值。其掛起塊時(shí)為 null
  • sha3Uncles: String, 32 Bytes - 區(qū)塊中的 uncle 數(shù)據(jù)的 SHA3。
  • logsBloom: String, 256 Bytes - 區(qū)塊的日志的 bloom 過濾器。其掛起塊時(shí)為 null。
  • transactionsRoot: String, 32 Bytes - 區(qū)塊的交易 trie 的根.
  • stateRoot: String, 32 Bytes - 區(qū)塊的最終狀態(tài) trie 的根。
  • miner: String, 20 Bytes - 獲得采礦獎(jiǎng)勵(lì)的受益人的地址。
  • difficulty: BigNumber - 這個(gè)區(qū)塊的難度的整數(shù)。
  • totalDifficulty: BigNumber - 鏈的總難度的整數(shù),直到這個(gè)區(qū)塊。
  • extraData: String - 該塊的“額外數(shù)據(jù)”字段。
  • size: Number - 整數(shù)這個(gè)區(qū)塊的大?。ㄒ宰止?jié)為單位)。
  • gasLimit: Number - 該區(qū)塊允許的最大 gas 量。
  • gasUsed: Number - 此區(qū)塊中所有交易的總使用 gas。
  • timestamp: Number - 整理塊時(shí)的 unix 時(shí)間戳。
  • transactions: Array - 交易對象的數(shù)組,或 32 字節(jié)交易哈希,具體取決于最后給定的參數(shù)。
  • uncles: Array - 一堆叔叔哈希。
示例:
var info = web3.eth.getBlock(3150);
console.log(info);
/*
{
 "number": 3,
 "hash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46",
 "parentHash": "0x2302e1c0b972d00932deb5dab9eb2982f570597d9d42504c05d9c2147eaf9c88",
 "nonce": "0xfb6e1a62d119228b",
 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
 "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
 "transactionsRoot": "0x3a1b03875115b79539e5bd33fb00d8f7b7cd61929d5a3c574f507b8acf415bee",
 "stateRoot": "0xf1133199d44695dfa8fd1bcfe424d82854b5cebef75bddd7e40ea94cda515bcb",
 "miner": "0x8888f1f195afa192cfee860698584c030f4c9db1",
 "difficulty": BigNumber,
 "totalDifficulty": BigNumber,
 "size": 616,
 "extraData": "0x",
 "gasLimit": 3141592,
 "gasUsed": 21662,
 "timestamp": 1429287689,
 "transactions": [
   "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b"
 ],
 "uncles": []
}
*/

2.18.17 getBlockTransactionCount(hash/number)

接口:

web3.eth.getBlockTransactionCount

web3.eth.getBlockTransactionCount(hashStringOrBlockNumber [, callback])

返回給定區(qū)塊中的交易數(shù)。

參數(shù):
  1. String|Number - 區(qū)塊號或散列。或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”,“l(fā)atest” 或 “pending”。
  2. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信
返回值:

Number - 給定區(qū)塊中的交易數(shù)。

示例:
var number = web3.eth.getBlockTransactionCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1");
console.log(number); // 1

2.18.18 getUncle(hash/number)

接口:

web3.eth.getUncle

web3.eth.getUncle(blockHashStringOrNumber, uncleNumber [, returnTransactionObjects] [, callback])

按給定的叔叔索引位置返回一個(gè)區(qū)塊叔叔。

參數(shù):
  1. String|Number - 區(qū)塊號或散列。或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”,“l(fā)atest” 或 “pending”。
  2. Number - 叔區(qū)塊的索引位置。
  3. Boolean - (可選,默認(rèn)為 false)如果為 true,則返回的區(qū)塊將包含所有事務(wù)作為對象,如果為 false,則僅包含交易哈希。
  4. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信
返回值:

Object - 返回的的叔區(qū)塊。有關(guān)返回值,請參閱 web3.eth.getBlock()。注意:叔區(qū)塊不包含單個(gè)交易。

示例:
var uncle = web3.eth.getUncle(500, 0);
console.log(uncle); // see web3.eth.getBlock

2.18.19 getBlockUncleCount(hash/number)

2.18.20 getTransaction(hash)

接口:

web3.eth.getTransaction

web3.eth.getTransaction(transactionHash [, callback])

返回與給定交易哈希匹配的事務(wù)。

參數(shù):
  1. String - 交易哈希。
  2. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

Object - 一個(gè)交易對象,它的哈希是 transactionHash:

  • hash: String, 32 Bytes - 交易的哈希值。
  • nonce: Number - 發(fā)送者在此之前進(jìn)行的交易次數(shù)。
  • blockHash: String, 32 Bytes - 此交易所在的區(qū)塊的哈希值。當(dāng)其掛起時(shí)為 null
  • blockNumber: Number - 此事務(wù)所在的區(qū)塊編號。當(dāng)其掛起時(shí)為 null。
  • transactionIndex: Number - 區(qū)塊中交易索引位置的整數(shù)。當(dāng)它掛起時(shí)為 null。
  • from: String, 20 Bytes - 發(fā)送者的地址。
  • to: String, 20 Bytes - 接收者的地址。合同創(chuàng)建交易時(shí)為 null。
  • value: BigNumber - 以 Wei 為單位,表示轉(zhuǎn)發(fā)多少個(gè) Wei。
  • gasPrice: BigNumber - 發(fā)送者提供的 gas 價(jià)格。
  • gas: Number - 發(fā)送者提供的 gas。
  • input: String - 與交易一起發(fā)送的數(shù)據(jù)。
示例:
var transaction = web3.eth.getTransaction('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b');
console.log(transaction);
/*
{
 "hash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b",
 "nonce": 2,
 "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46",
 "blockNumber": 3,
 "transactionIndex": 0,
 "from": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
 "to": "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f",
 "value": BigNumber,
 "gas": 314159,
 "gasPrice": BigNumber,
 "input": "0x57cb2fc4"
}
*/

2.18.21 getTransactionFromBlock(hashOrNumber, indexNumber)

接口:

web3.eth.getTransactionFromBlock

getTransactionFromBlock(hashStringOrNumber, indexNumber [, callback])

返回基于區(qū)塊哈?;驍?shù)字以及交易索引位置的交易。

參數(shù):
  1. String|Number - 區(qū)塊號或散列。或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”,“l(fā)atest” 或 “pending”。
  2. Number - 交易索引。
  3. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

Object - 交易對象,參考 web3.eth.getTransaction。

示例:
var transaction = web3.eth.getTransactionFromBlock('0x4534534534', 2);
console.log(transaction); // see web3.eth.getTransaction

2.18.22 getTransactionReceipt(hash)

接口:

web3.eth.getTransactionReceipt

web3.eth.getTransactionReceipt(hashString [, callback])

按交易哈希返回的交易回執(zhí)。請注意,交易回執(zhí)不適用于待處理的交易。

參數(shù):
  1. String - 交易哈希。
  2. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

Object - 交易回執(zhí)對象,當(dāng)交易回執(zhí)不存在時(shí)返回 null

  • blockHash: String, 32 Bytes - 此交易所在的塊的哈希值。
  • blockNumber: Number - 此交易所在的區(qū)號。
  • transactionHash: String, 32 Bytes - 交易的哈希值。
  • transactionIndex: Number - 區(qū)塊中交易索引位置的整數(shù)。
  • from: String, 20 Bytes - 發(fā)送者的地址。
  • to: String, 20 Bytes - 接收者的地址。合同創(chuàng)建交易時(shí)為 null。
  • cumulativeGasUsed : Number - 在區(qū)塊中執(zhí)行此交易時(shí)使用的總 gas。
  • gasUsed : Number - 僅此特定交易所使用的 gas。
  • contractAddress : String - 20 Bytes - 如果交易是創(chuàng)建合約,則創(chuàng)建合約地址,否則為 null。
  • logs : Array - 此交易生成的日志對象數(shù)組。
  • status : String - '0x0' 表示交易失敗,'0x1' 表示交易成功。
示例:
var receipt = web3.eth.getTransactionReceipt('0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b');
console.log(receipt);
{
  "transactionHash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b",
  "transactionIndex": 0,
  "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46",
  "blockNumber": 3,
  "contractAddress": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
  "cumulativeGasUsed": 314159,
  "gasUsed": 30234,
  "logs": [{
         // logs as returned by getFilterLogs, etc.
     }, ...],
  "status": "0x1"
}

2.18.23 getTransactionCount(address)

接口:

web3.eth.getTransactionCount

web3.eth.getTransactionCount(addressHexString [, defaultBlock] [, callback])

獲取從此地址發(fā)送的交易數(shù)量。

參數(shù):
  1. String - 從中獲取交易數(shù)量的地址。
  2. String|Number - 區(qū)塊號或散列。或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”,“l(fā)atest” 或 “pending”。
  3. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

Number - 從給定地址發(fā)送的交易數(shù)。

示例:
var number = web3.eth.getTransactionCount("0x407d73d8a49eeb85d32cf465507dd71d507100c1");
console.log(number); // 1

2.18.24 sendTransaction(object)

接口:

web3.eth.sendTransaction

web3.eth.sendTransaction(transactionObject [, callback])

向網(wǎng)絡(luò)中發(fā)送一筆交易。

參數(shù):
  1. Object - 待發(fā)送的交易對象。
  • from: String - 發(fā)送帳戶的地址。如果未指定,則使用 web3.eth.defaultAccount 屬性。
  • to: String - (可選)消息的目標(biāo)地址,未定義合同創(chuàng)建交易。
  • value: Number|String|BigNumber - (可選)以 Wei 為單位進(jìn)行幣轉(zhuǎn)移的交易,如果是合約創(chuàng)建交易,也是捐贈。
  • gas: Number|String|BigNumber - (可選,默認(rèn):待定)用于交易的 gas(未使用的 gas 退還)。
  • gasPrice: Number|String|BigNumber - (可選,默認(rèn):待定)此交易的 gas 價(jià)格在 wei 中,默認(rèn)為平均網(wǎng)絡(luò) gas 價(jià)格。
  • data: String - (可選)包含消息的關(guān)聯(lián)數(shù)據(jù)的字節(jié)字符串,或者在合同創(chuàng)建交易的情況下,是初始化代碼。
  • nonce: Number - (可選)隨機(jī)數(shù)的整數(shù)。這允許覆蓋使用相同 nonce 的自己的掛起交易。
  1. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

String - 32 字節(jié)交易哈希為 HEX 字符串。如果交易是合同創(chuàng)建,則使用 web3.eth.getTransactionReceipt() 獲取合同地址,在交易被挖掘之后。

示例:
// compiled solidity source code using https://chriseth.github.io/cpp-ethereum/
var code = "603d80600c6000396000f3007c01000000000000000000000000000000000000000000000000000000006000350463c6888fa18114602d57005b6007600435028060005260206000f3";
web3.eth.sendTransaction({data: code}, function(err, transactionHash) {
 if (!err)
   console.log(transactionHash); // "0x7f9fade1c0d57a7af66ab4ead7c2eb7b11a91385"
});

2.18.25 sendRawTransaction(object)

接口:

web3.eth.sendRawTransaction

web3.eth.sendRawTransaction(signedTransactionData [, callback])

發(fā)送已簽名的交易。例如,可以使用以下命令進(jìn)行簽名:https://github.com/SilentCicero/ethereumjs-accounts

參數(shù):
  1. String - 以 HEX 格式簽署的交易數(shù)據(jù)。
  2. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

String - 32 字節(jié)交易哈希為 HEX 字符串。如果交易是合約創(chuàng)建,則使用 web3.eth.getTransactionReceipt() 獲取合約地址,在交易被挖掘之后。

示例:
var Tx = require('ethereumjs-tx');
var privateKey = new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex')
var rawTx = {
 nonce: '0x00',
 gasPrice: '0x09184e72a000', 
 gasLimit: '0x2710',
 to: '0x0000000000000000000000000000000000000000', 
 value: '0x00', 
 data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057'
}
var tx = new Tx(rawTx);
tx.sign(privateKey);
var serializedTx = tx.serialize();
//console.log(serializedTx.toString('hex'));
//f889808609184e72a00082271094000000000000000000000000000000000000000080a47f74657374320000000000000000000000000000000000000000000000000000006000571ca08a8bbf888cfa37bbf0bb965423625641fc956967b81d12e23709cead01446075a01ce999b56a8a88504be365442ea61239198e23d1fce7d00fcfc5cd3b44b7215f
web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
 if (!err)
   console.log(hash); // "0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385"
});

2.18.26 sign(object)

接口:

web3.eth.sign

web3.eth.sign(address, dataToSign, [, callback])

從特定帳戶簽署數(shù)據(jù)。此帳戶需要解鎖。

參數(shù):
  1. String - 要簽名的地址。
  2. String - 要簽名的數(shù)據(jù)。
  3. Function - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

String - 簽名數(shù)據(jù)。在十六進(jìn)制前綴之后,字符對應(yīng)于 ECDSA 值,如下所示:

r = signature[0:64]
s = signature[64:128]
v = signature[128:130]

請注意,如果使用的是 ecrecover,則 v 將為 “00” 或 “01”。因此,為了使用此值,必須將其解析為整數(shù)然后再添加 27.這將導(dǎo)致 27 或 28。

示例:
var result = web3.eth.sign("0x135a7de83802408321b74c322f8558db1679ac20",
   "0x9dd2c369a187b4e6b9c402f030e50743e619301ea62aa4c0737d4ef7e10a3d49"); // second argument is web3.sha3("xyz")
console.log(result); // "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"

2.18.27 call(object)

接口:

web3.eth.call

web3.eth.call(callObject [, defaultBlock] [, callback])

執(zhí)行消息調(diào)用交易,該交易直接在節(jié)點(diǎn)的 VM 中執(zhí)行,但從未開采到區(qū)塊鏈中。

參數(shù):
  1. Object - 交易對象參見 web3.eth.sendTransaction,區(qū)別在于對于調(diào)用,from 屬性也是可選的。
  2. Number|String - (可選)如果傳遞此參數(shù),則不會使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊。
  3. Function - 方法 - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信
返回值:

String - 返回調(diào)用的結(jié)果,例如代碼函數(shù)返回值。

示例:
var result = web3.eth.call({
   to: "0xc4abd0339eb8d57087278718986382264244252f", 
   data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003"
});
console.log(result); // "0x0000000000000000000000000000000000000000000000000000000000000015"

2.18.28 estimateGas(object)

接口:

web3.eth.estimateGas

web3.eth.estimateGas(callObject [, callback])

執(zhí)行消息調(diào)用或交易,它直接在節(jié)點(diǎn)的 VM 中執(zhí)行,但從未開采到區(qū)塊鏈中并返回使用的 gas 量。

參數(shù):

請參閱 web3.eth.sendTransaction,但所有屬性都是可選的。

返回值:

Number - 用于模擬調(diào)用/交易的用過的 gas。

示例:
var result = web3.eth.estimateGas({
   to: "0xc4abd0339eb8d57087278718986382264244252f", 
   data: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000003"
});
console.log(result); // "0x0000000000000000000000000000000000000000000000000000000000000015"

2.18.29 filter(array (, options)

  • watch(callback)
  • stopWatching(callback)
  • get()
// can be 'latest' or 'pending'
var filter = web3.eth.filter(filterString);
// OR object are log filter options
var filter = web3.eth.filter(options);
// watch for changes
filter.watch(function(error, result){
 if (!error)
   console.log(result);
});
// Additionally you can start watching right away, by passing a callback:
web3.eth.filter(options, function(error, result){
 if (!error)
   console.log(result);
});
參數(shù):
  1. String|Object - 字符串 “l(fā)atest” 或 “pending” 分別用于監(jiān)視最新區(qū)塊或待處理交易中的更改?;蛘哌^濾器選項(xiàng)對象如下:
  • fromBlock: Number|String - 最早的區(qū)塊的數(shù)量(latest 可能是指最近和 pending 當(dāng)前挖掘區(qū)塊)。默認(rèn)情況下 latest
  • toBlock: Number|String - 最新區(qū)塊的編號(latest 可能表示最近和 pending 當(dāng)前挖掘塊)。默認(rèn)情況下 latest。
  • address: String - 僅從特定帳戶獲取日志的地址或地址列表。
  • topics: Array of Strings - 必須各自出現(xiàn)在日志條目中的值數(shù)組。順序很重要,如果想要將主題留出使用 null,例如[null,'0x00 ...']。還可以為每個(gè)主題傳遞另一個(gè)數(shù)組,其中包含該主題的選項(xiàng),例如[null,['option1','option2']]
返回值:

Object - 具有以下方法的過濾器對象:

  • filter.get(callback): 返回適合過濾器的所有日志條目。
  • filter.watch(callback): 監(jiān)視適合過濾器的狀態(tài)更改并調(diào)用回調(diào)。請參閱此處說明以獲取詳細(xì)信息。
  • filter.stopWatching(): 停止監(jiān)視并卸載節(jié)點(diǎn)中的過濾器。一旦完成,應(yīng)始終調(diào)用。
觀察回調(diào)返回值:
  • String - 使用 “l(fā)atest” 參數(shù)時(shí),它返回最后一個(gè)傳入?yún)^(qū)塊的區(qū)塊哈希。
  • String - 使用 “pending” 參數(shù)時(shí),它返回最近掛起交易的交易哈希。
  • Object - 使用手動(dòng)過濾器選項(xiàng)時(shí),它返回一個(gè)日志對象,如下所示:
    • logIndex: Number - 區(qū)塊中日志索引位置的整數(shù)。其掛起日志時(shí)為 null
    • transactionIndex: Number - 從中創(chuàng)建了交易索引位置日志的整數(shù)。其掛起日志時(shí)為 null
    • transactionHash: String, 32 Bytes - 此日志創(chuàng)建的事務(wù)的哈希值。其掛起日志時(shí)為 null
    • blockHash: String, 32 Bytes - 此日志所在區(qū)塊的哈希值。當(dāng)其掛起時(shí)為 null。其掛起日志時(shí)為 null。
    • blockNumber: Number - 此日志所在的區(qū)塊編號。當(dāng)其掛起時(shí)為 null。其掛起日志時(shí)為 null。
    • address: String, 32 Bytes - 此日志源自的地址。
    • data: String - 包含日志的一個(gè)或多個(gè)32字節(jié)非索引參數(shù)。
    • topics: Array of Strings - 索引日志參數(shù)的 0 到 4 32 字節(jié)數(shù)組。 (實(shí)際上:第一個(gè)主題是事件簽名的哈希值(例如Deposit(address,bytes32,uint256)),除非使用匿名說明符聲明了事件。)
    • type: STRING - 日志掛起時(shí) pending。如果已經(jīng)開采了日志,則 mined。注意有關(guān)事件篩選器返回值,請參閱合約事件。
示例:
var filter = web3.eth.filter({toBlock:'pending'});
filter.watch(function (error, log) {
 console.log(log); //  {"address":"0x0000000000000000000000000000000000000000", "data":"0x0000000000000000000000000000000000000000000000000000000000000000", ...}
});
// get all past logs again.
var myResults = filter.get(function(error, logs){ ... });
...
// stops and uninstalls the filter
filter.stopWatching();

2.18.30 Contract(abiArray)

接口:

web3.eth.contract

web3.eth.contract(abiArray)

為Solidity合約創(chuàng)建合約對象,該對象可用于在地址上啟動(dòng)合約??梢栽?a target="_blank" rel="nofollow">此處閱讀最新有關(guān)事件的更多信。

參數(shù):

Object - 合約對象,可以按如下方式啟動(dòng):

var MyContract = web3.eth.contract(abiArray);
// instantiate by address
var contractInstance = MyContract.at(address);
// deploy new contract
var contractInstance = MyContract.new([constructorParam1] [, constructorParam2], {data: '0x12345...', from: myAccount, gas: 1000000});
// Get the data to deploy the contract manually
var contractData = MyContract.new.getData([constructorParam1] [, constructorParam2], {data: '0x12345...'});
// contractData = '0x12345643213456000000000023434234'

然后,可以在地址上啟動(dòng)現(xiàn)有合約,或使用已編譯的字節(jié)代碼部署合約:

// Instantiate from an existing address:
var myContractInstance = MyContract.at(myContractAddress);
// Or deploy a new contract:
// Deploy the contract asynchronous from Solidity file:
...
const fs = require("fs");
const solc = require('solc')
let source = fs.readFileSync('nameContract.sol', 'utf8');
let compiledContract = solc.compile(source, 1);
let abi = compiledContract.contracts['nameContract'].interface;
let bytecode = compiledContract.contracts['nameContract'].bytecode;
let gasEstimate = web3.eth.estimateGas({data: bytecode});
let MyContract = web3.eth.contract(JSON.parse(abi));
var myContractReturned = MyContract.new(param1, param2, {
  from:mySenderAddress,
  data:bytecode,
  gas:gasEstimate}, function(err, myContract){
   if(!err) {
      // NOTE: The callback will fire twice!
      // Once the contract has the transactionHash property set and once its deployed on an address.
       // e.g. check tx hash on the first call (transaction send)
      if(!myContract.address) {
          console.log(myContract.transactionHash) // The hash of the transaction, which deploys the contract
      
      // check address on the second call (contract deployed)
      } else {
          console.log(myContract.address) // the contract address
      }
       // Note that the returned "myContractReturned" === "myContract",
      // so the returned "myContractReturned" object will also get the address set.
   }
 });
// Deploy contract syncronous: The address will be added as soon as the contract is mined.
// Additionally you can watch the transaction by using the "transactionHash" property
var myContractInstance = MyContract.new(param1, param2, {data: bytecode, gas: 300000, from: mySenderAddress});
myContractInstance.transactionHash // The hash of the transaction, which created the contract
myContractInstance.address // undefined at start, but will be auto-filled later
示例:
// contract abi
var abi = [{
    name: 'myConstantMethod',
    type: 'function',
    constant: true,
    inputs: [{ name: 'a', type: 'string' }],
    outputs: [{name: 'd', type: 'string' }]
}, {
    name: 'myStateChangingMethod',
    type: 'function',
    constant: false,
    inputs: [{ name: 'a', type: 'string' }, { name: 'b', type: 'int' }],
    outputs: []
}, {
    name: 'myEvent',
    type: 'event',
    inputs: [{name: 'a', type: 'int', indexed: true},{name: 'b', type: 'bool', indexed: false}]
}];
// creation of contract object
var MyContract = web3.eth.contract(abi);
// initiate contract for an address
var myContractInstance = MyContract.at('0xc4abd0339eb8d57087278718986382264244252f');
// call constant function
var result = myContractInstance.myConstantMethod('myParam');
console.log(result) // '0x25434534534'
// send a transaction to a function
myContractInstance.myStateChangingMethod('someParam1', 23, {value: 200, gas: 2000});
// short hand style
web3.eth.contract(abi).at(address).myAwesomeMethod(...);
// create filter
var filter = myContractInstance.myEvent({a: 5}, function (error, result) {
 if (!error)
   console.log(result);
   /*
   {
       address: '0x8718986382264244252fc4abd0339eb8d5708727',
       topics: "0x12345678901234567890123456789012", "0x0000000000000000000000000000000000000000000000000000000000000005",
       data: "0x0000000000000000000000000000000000000000000000000000000000000001",
       ...
   }
   */
});

2.18.31 contract.myMethod()

接口:

Contract Methods

// Automatically determines the use of call or sendTransaction based on the method type
myContractInstance.myMethod(param1 [, param2, ...] [, transactionObject] [, defaultBlock] [, callback]);
// Explicitly calling this method
myContractInstance.myMethod.call(param1 [, param2, ...] [, transactionObject] [, defaultBlock] [, callback]);
// Explicitly sending a transaction to this method
myContractInstance.myMethod.sendTransaction(param1 [, param2, ...] [, transactionObject] [, callback]);
// Get the call data, so you can call the contract through some other means
// var myCallData = myContractInstance.myMethod.request(param1 [, param2, ...]);
var myCallData = myContractInstance.myMethod.getData(param1 [, param2, ...]);
// myCallData = '0x45ff3ff6000000000004545345345345..'

合約對象公開合約的方法,可以使用參數(shù)和交易對象調(diào)用這些方法。

參數(shù):
  1. String|Number|BigNumber - (可選)零個(gè)或多個(gè)函數(shù)參數(shù)。如果傳入一個(gè)字符串,則必須將其格式化為十六進(jìn)制數(shù)字,例如 “0xdeadbeef” 如果已經(jīng)創(chuàng)建了 BigNumber 對象,那么也可以通過它。
  2. Object - (可選)(previous)last 參數(shù)可以是交易對象,有關(guān)詳細(xì)信息,請參閱 web3.eth.sendTransaction 參數(shù) 1。注意:不會考慮 data 和 to 屬性。
  3. Number|String - (可選)如果傳遞此參數(shù),則不會使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊。
  4. Function - 方法 - (可選)如果傳遞回調(diào),則 HTTP 請求將成為異步。請參閱此處說明以獲取詳細(xì)信息。
返回值:

String - 如果它調(diào)用結(jié)果數(shù)據(jù),如果是發(fā)送交易的創(chuàng)建合約地址或交易哈希,請參閱 web3.eth.sendTransaction 以獲取詳細(xì)信息。

示例:
// creation of contract object
var MyContract = web3.eth.contract(abi);
// initiate contract for an address
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');
var result = myContractInstance.myConstantMethod('myParam');
console.log(result) // '0x25434534534'
myContractInstance.myStateChangingMethod('someParam1', 23, {value: 200, gas: 2000}, function(err, result){ ... });

2.18.32 contract.myEvent()

接口:

Contract Events

var event = myContractInstance.MyEvent({valueA: 23} [, additionalFilterObject])
// watch for changes
event.watch(function(error, result){
if (!error)
console.log(result);
});
// Or pass a callback to start watching immediately
var event = myContractInstance.MyEvent([{valueA: 23}] [, additionalFilterObject] , function(error, result){
if (!error)
console.log(result);
});

可以使用過濾器等事件,它們具有相同的方法,但可以傳遞不同的對象來創(chuàng)建事件過濾器。

參數(shù):
  1. Object - 要過濾日志的索引返回值,例如{'valueA':1,'valueB':[myFirstAddress,mySecondAddress]}。默認(rèn)情況下,所有過濾器值都設(shè)置為 null。這意味著,它們將匹配從此合同發(fā)送的任何給定類型的事件。
  2. Object - 其他過濾選項(xiàng),請參閱用過濾器參數(shù) 1了解更多信息默認(rèn)情況下,filterObject 將字段 “address” 設(shè)置為合約的地址。第一個(gè)主題是事件的簽名。
  3. Function - (可選)如果將回調(diào)作為最后一個(gè)參數(shù)傳遞,它將立即開始監(jiān)聽,無需調(diào)用 myEvent.watch(function(){})。請參閱此處說明以獲取詳細(xì)信息。
回調(diào)返回值:

Object - 一個(gè)事件對象如下:

  • address: String, 32 Bytes - 此日志源自的地址。
  • args: Object - 來自事件的參數(shù)。
  • blockHash: String, 32 Bytes - 此日志所在區(qū)塊的哈希值。當(dāng)其掛起時(shí)為 null
  • blockNumber: Number - 此日志所在的區(qū)塊編號。當(dāng)其掛起時(shí)為 null。
  • logIndex: Number - 區(qū)塊中日志索引位置的整數(shù)。
  • event: String - 事件名稱。
  • removed: bool - 指示此事件創(chuàng)建的交易是否已從區(qū)塊鏈中刪除(由于孤立塊)或從未到達(dá)(由于拒絕交易)。
  • transactionIndex: Number - 從中創(chuàng)建了交易索引位置日志的整數(shù)。
  • transactionHash: String, 32 Bytes - 此日志創(chuàng)建的交易的哈希值。
示例:
var MyContract = web3.eth.contract(abi);
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');
// watch for an event with {some: 'args'}
var myEvent = myContractInstance.MyEvent({some: 'args'}, {fromBlock: 0, toBlock: 'latest'});
myEvent.watch(function(error, result){
  ...
});
// would get all past logs again.
var myResults = myEvent.get(function(error, logs){ ... });
...
// would stop and uninstall the filter
myEvent.stopWatching();

2.18.33 contract.allEvents()

接口:

Contract allEvents

var events = myContractInstance.allEvents([additionalFilterObject]);
// watch for changes
events.watch(function(error, event){
 if (!error)
   console.log(event);
});
// Or pass a callback to start watching immediately
var events = myContractInstance.allEvents([additionalFilterObject], function(error, log){
 if (!error)
   console.log(log);
});

將為此合約創(chuàng)建的所有事件調(diào)用回調(diào)。

參數(shù):
  1. Object - 其他過濾選項(xiàng),請參閱用過濾器參數(shù) 1了解更多信息默認(rèn)情況下,filterObject 將字段 “address” 設(shè)置為合約的地址。第一個(gè)主題是事件的簽名。
  2. Function - (可選)如果將回調(diào)作為最后一個(gè)參數(shù)傳遞,它將立即開始監(jiān)聽,無需調(diào)用 myEvent.watch(function(){})。請參閱此處說明以獲取詳細(xì)信息。
回調(diào)返回值:

Object - 參考 Contract Events。

示例:
var MyContract = web3.eth.contract(abi);
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');
// watch for an event with {some: 'args'}
var events = myContractInstance.allEvents({fromBlock: 0, toBlock: 'latest'});
events.watch(function(error, result){
  ...
});
// would get all past logs again.
events.get(function(error, logs){ ... });
...
// would stop and uninstall the filter
events.stopWatching();

2.18.34 getCompilers()

2.18.35 compile.lll(string)

2.18.35 compile.solidity(string)

2.18.36 compile.serpent(string)

2.18.37 namereg

2.18.38 sendIBANTransaction

2.18.39 iban

2.18.39.1 fromAddress
2.18.39.2 fromBban
2.18.39.3 createIndirect
2.18.39.4 isValid
2.18.39.5 isDirect
2.18.39.6 isIndirect
2.18.39.7 checksum
2.18.39.8 institution
2.18.39.9 client
2.18.38.10 address
2.18.38.11 toString

2.19 db

2.19.1 putString(name, key, value)

2.19.2 getString(- var rXArray = stringToNumberArray(form.rX.value); name, key)

2.19.3 putHex(name, key, value)

2.19.4 getHex(name, key)

2.20 shh

2.20.1 post(postObject)

2.20.2 newIdentity()

2.20.3 hasIdentity(hexString)

2.20.4 newGroup(_id, _who)

2.20.5 addToGroup(_id, _who)

2.20.6 filter(object/string)

2.20.6.1 watch(callback)
2.20.6.2 stopWatching(callback)
2.20.6.3 get(callback)

項(xiàng)目源代碼

項(xiàng)目源代碼會逐步上傳到 Github,地址為 https://github.com/windstamp/jsonrpc

Contributor

  1. Windstamp, https://github.com/windstamp

Reference

  1. https://github.com/ethereum/wiki/wiki/JavaScript-API
  2. https://github.com/ethereum/web3.js
  3. https://web3js.readthedocs.io/en/1.0/index.html
  4. https://github.com/ethereum/wiki/wiki/JSON-RPC
  5. https://github.com/ethereum/web3.js/tree/master/example
  6. https://github.com/ethereum/wiki/wiki/Useful-%C3%90app-Patterns#examples
  7. https://github.com/ethereum/wiki/wiki/web3js-api-reference
  8. http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/
  9. https://github.com/MikeMcl/bignumber.js/
  10. https://web3.learnblockchain.cn/0.2x.x/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. 文章摘要 【本文目標(biāo)】了解ETH生態(tài)下DAPP去中心化應(yīng)用程序的框架和交互流程,了解WEB3.JS的作用和接...
    筆名輝哥閱讀 6,100評論 0 49
  • 最新內(nèi)容會更新在主站深入淺出區(qū)塊鏈社區(qū)原文鏈接:Web3.js 0.20.x API 中文版翻譯 文檔原始鏈接為:...
    深入淺出區(qū)塊鏈閱讀 1,246評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,969評論 19 139
  • 郭芳艷 焦點(diǎn)網(wǎng)絡(luò)初級五期 堅(jiān)持原創(chuàng)分享第360天 今日不知道怎么回事,也不知道最近對兒子過于理解和寬容...
    冰山藍(lán)鷹閱讀 106評論 0 0
  • 二月花的那個(gè)女人,對我有種莫名其妙的吸引,每次到千璽廣場,我都被她吸引著,情不自禁地到她的商鋪看一看。 她長得小鳥...
    夢夢一一閱讀 196評論 1 1