Web3 JavaScript app API for 0.2x.x
本文基本上是翻譯自 JavaScript API。但是補(bǔ)充了詳細(xì)的實(shí)例代碼负溪。
注意:這些文檔適用于 web3.js 版本 0.2x.x颠区。如果使用的是 web3.js 1.0错森,請(qǐng)參閱此文檔扁眯。要使應(yīng)用程序在以太坊上運(yùn)行疙挺,可以使用 web3.js 庫(kù) 提供的 web3
對(duì)象钮呀。在此基礎(chǔ)上剑鞍,它通過(guò) RPC 調(diào)用 與本地節(jié)點(diǎn)通信。 web3.js 適用于暴露 RPC 層的任何以太坊節(jié)點(diǎn)行楞。 web3
包含 eth
對(duì)象 - web3.eth
(特別是以太坊區(qū)塊鏈交互)和 shh
對(duì)象 - web3.shh
(用于 Whisper 交互)攒暇。隨著時(shí)間的推移,我們將為每個(gè)其他 web3 協(xié)議引入其他對(duì)象子房。可以在這里找到工作示例形用。如果想使用 web3.js 查看一些更復(fù)雜的示例,請(qǐng)查看這些有用的應(yīng)用程序模式证杭。
1. 開(kāi)始
1.1 安裝 web3
首先田度,需要將 web3.js 放入項(xiàng)目中。這可以使用以下方法完成:
- npm:
npm install web3
ornpm install web3@0.20.6
ornpm install web3@0.20.6 --save
- vanilla: 鏈接 dist./web3.min.js 然后需要?jiǎng)?chuàng)建一個(gè) web3 實(shí)例解愤,設(shè)置一個(gè)提供者镇饺。要確保在 mist 中時(shí)不覆蓋已設(shè)置的 provider,請(qǐng)首先檢查 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 對(duì)象的 API奸笤。這實(shí)際上是監(jiān)控 coinbase 最新余額的示例,見(jiàn)我們的 github 倉(cāng)庫(kù)哼鬓。
1.2 使用回調(diào)
由于此 API 旨在與本地 RPC 節(jié)點(diǎn)一起使用监右,因此默認(rèn)情況下其所有函數(shù)都使用同步 HTTP 請(qǐng)求。如果要進(jìn)行異步請(qǐng)求异希,可以將可選回調(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 批處理請(qǐng)求
批處理請(qǐng)求允許排隊(duì)請(qǐng)求并一次性處理它們。注意批量請(qǐng)求不會(huì)更快称簿!實(shí)際上扣癣,在某些情況下,一次性地發(fā)出許多請(qǐng)求會(huì)更快憨降,因?yàn)檎?qǐng)求是異步處理的父虑。批處理請(qǐng)求主要用于確保請(qǐng)求的串行處理。
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ù)字的說(shuō)明
我們將始終獲得數(shù)字值的BigNumber對(duì)象授药,因?yàn)镴avaScript無(wú)法正確處理大數(shù)字频轿。請(qǐng)看以下示例:
"101010100324325345346456456456456456456"
// "101010100324325345346456456456456456456"
101010100324325345346456456456456456456
// 1.0101010032432535e+38
web3.js取決于BigNumber庫(kù)并自動(dòng)添加它垂涯。實(shí)踐下來(lái),有時(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)槲覀冇谐^(guò)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對(duì)象提供了所有的方法膳殷。
示例:
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)理以外的一切。卸載所有過(guò)濾器辱匿。停止 polling键痛。
參數(shù):
-
Boolean
- 如果為true
,它將卸載所有過(guò)濾器匾七,但將保留web3.eth.isSyncing()輪詢
返回值:
undefined
示例:
web3.reset();
2.7 sha3(string, options)
接口:
web3.sha3
web3.sha3(string [, options])
參數(shù):
-
String
- 要使用Keccak-256 SHA3算法進(jìn)行哈希處理的字符串 -
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ù):
-
String|Number|Object|Array|BigNumber
- 要解析為HEX的值邑贴。如果它是一個(gè)對(duì)象或數(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ù):
-
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ù):
-
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ù):
-
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ù):
-
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ù):
-
Number|String|BigNumber
- 數(shù)字或BigNumber實(shí)例。 -
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莉恼。可能的單位是:
-
kwei
/ada
-
mwei
/babbage
-
gwei
/shannon
szabo
finney
ether
-
kether
/grand
/einstein
mether
gether
tether
參數(shù):
-
Number|String|BigNumber
- 數(shù)字或BigNumber實(shí)例速那。 -
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í)例。請(qǐng)參閱 BigNumber 上的注釋荔烧。
參數(shù):
-
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ù):
-
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)偵聽(tīng)網(wǎng)絡(luò)連接微峰。
返回值:
Boolean
- 如果客戶端正在主動(dòng)偵聽(tī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){ ... })
此屬性是只讀的,并返回已連接的對(duì)等方的數(shù)量谋币。
返回值:
Number
- 當(dāng)前連接到客戶端的對(duì)等方數(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)地址用于以下方法(可選擇通過(guò)指定 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)塊用于以下方法(可選擇通過(guò)傳遞 defaultBlock 參數(shù)來(lái)覆蓋它):
- 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ū)塊號(hào) -
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ū)塊編號(hào)退个。
示例:
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í)返回同步對(duì)象。
返回值:
Object|Boolean
- 當(dāng)節(jié)點(diǎn)當(dāng)前正在同步或假時(shí)语盈,同步對(duì)象如下:
-
startingBlock
:Number
- 同步開(kāi)始的區(qū)塊編號(hào)舱馅。 -
currentBlock
:Number
- 區(qū)塊編號(hào),節(jié)點(diǎn)當(dāng)前已同步到哪個(gè)區(qū)塊黎烈。 -
highestBlock
:Number
- 要同步的預(yù)期區(qū)塊編號(hào)习柠。
示例:
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);
每次同步開(kāi)始,更新和停止時(shí)照棋,此便捷功能都會(huì)調(diào)用回調(diào)资溃。
返回值:
Object
- 一個(gè) isSyncing 對(duì)象,具有以下方法:
-
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)同步開(kāi)始時(shí)符隙,回調(diào)將被觸發(fā)為true
趴捅,而當(dāng)它停止時(shí),回調(diào)將被觸發(fā)霹疫。 -
Object
- 同步時(shí)它將返回同步對(duì)象:-
startingBlock
:Number
- 同步開(kāi)始的區(qū)塊編號(hào)拱绑。 -
currentBlock
:Number
- 區(qū)塊編號(hào),節(jié)點(diǎn)當(dāng)前已同步到哪個(gè)區(qū)塊丽蝎。 -
highestBlock
:Number
- 要同步的預(yù)期區(qū)塊編號(hào)猎拨。
-
示例:
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í)例痕寓。請(qǐng)參閱 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){ ... })
此屬性是只讀的丁眼,并說(shuō)明節(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ū)塊編號(hào)蹂风。
返回值:
Number
- 最近區(qū)塊的編號(hào)卢厂。
示例:
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))注冊(cè)要包含在 web3.eth.accounts 中的給定地址。這允許非私有密鑰擁有的帳戶被關(guān)聯(lián)為擁有帳戶(例如惠啄,合約錢包)慎恒。
參數(shù):
-
String
- 要注冊(cè)的地址 -
Function
- (可選)如果傳遞回調(diào),則 HTTP 請(qǐng)求將成為異步撵渡。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息。
返回值:
?
示例:
web3.eth.register("0x407d73d8a49eeb85d32cf465507dd71d507100ca")
2.18.12 unRegister(hexString) (Not implemented yet)
接口:
web3.eth.unRegister
web3.eth.unRegister(addressHexString [, callback])
(尚未實(shí)施)取消注冊(cè)給定地址。
參數(shù):
-
String
- 要取消注冊(cè)的地址 -
Function
- (可選)如果傳遞回調(diào)窒悔,則 HTTP 請(qǐng)求將成為異步喳篇。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息。
返回值:
?
示例:
web3.eth.unregister("0x407d73d8a49eeb85d32cf465507dd71d507100ca")
2.18.13 getBalance(address)
接口:
web3.eth.getBalance
web3.eth.getBalance(addressHexString [, defaultBlock] [, callback])
獲取給定區(qū)塊的地址余額节腐。
參數(shù):
-
String
- 獲得余額的地址外盯。 -
Number|String
- (可選)如果傳遞此參數(shù),則不會(huì)使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊翼雀。 -
Function
- 方法 - (可選)如果傳遞回調(diào)饱苟,則 HTTP 請(qǐng)求將成為異步。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信
返回值:
String
- wei 中給定地址的當(dāng)前余額的 BigNumber 實(shí)例狼渊。請(qǐng)參閱 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])
將存儲(chǔ)空間放在地址的特定位置。
參數(shù):
-
String
- 從中獲取存儲(chǔ)的地址囤锉。 -
Number
- 存儲(chǔ)的索引位置坦弟。 -
Number|String
- (可選)如果傳遞此參數(shù),則不會(huì)使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊官地。 -
Function
- 方法 - (可選)如果傳遞回調(diào)酿傍,則 HTTP 請(qǐng)求將成為異步。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信
返回值:
String
- 給定位置的存儲(chǔ)值驱入。
示例:
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ù):
-
String
- 從中獲取代碼的地址。 -
Number|String
- (可選)如果傳遞此參數(shù)亏较,則不會(huì)使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊莺褒。 -
Function
- 方法 - (可選)如果傳遞回調(diào),則 HTTP 請(qǐng)求將成為異步雪情。請(qǐng)參閱此處說(shuō)明以獲取詳細(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ū)塊編號(hào)或塊哈希匹配的區(qū)塊。
參數(shù):
-
String|Number
- 區(qū)塊號(hào)或散列〕局矗或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”舍哄,“l(fā)atest” 或 “pending”。 -
Boolean
- (可選誊锭,默認(rèn)為false
)如果為true
表悬,則返回的區(qū)塊將包含所有事務(wù)作為對(duì)象,如果為false
丧靡,則僅包含交易哈希蟆沫。 -
Function
- (可選)如果傳遞回調(diào),則 HTTP 請(qǐng)求將成為異步温治。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信
返回值:
Object
- 區(qū)塊對(duì)象:
-
number
:Number
- 區(qū)塊號(hào)饭庞。其掛起塊時(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 過(guò)濾器纬黎。其掛起塊時(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
- 交易對(duì)象的數(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ù):
-
String|Number
- 區(qū)塊號(hào)或散列欠动∮牢冢或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”,“l(fā)atest” 或 “pending”。 -
Function
- (可選)如果傳遞回調(diào)翅雏,則 HTTP 請(qǐng)求將成為異步硝桩。請(qǐng)參閱此處說(shuō)明以獲取詳細(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ù):
-
String|Number
- 區(qū)塊號(hào)或散列√浼纾或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”橄妆,“l(fā)atest” 或 “pending”。 -
Number
- 叔區(qū)塊的索引位置祈坠。 -
Boolean
- (可選害碾,默認(rèn)為false
)如果為true
,則返回的區(qū)塊將包含所有事務(wù)作為對(duì)象赦拘,如果為false
慌随,則僅包含交易哈希。 -
Function
- (可選)如果傳遞回調(diào)躺同,則 HTTP 請(qǐng)求將成為異步阁猜。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信
返回值:
Object
- 返回的的叔區(qū)塊。有關(guān)返回值蹋艺,請(qǐng)參閱 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ù):
-
String
- 交易哈希民效。 -
Function
- (可選)如果傳遞回調(diào),則 HTTP 請(qǐng)求將成為異步涛救。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息畏邢。
返回值:
Object
- 一個(gè)交易對(duì)象,它的哈希是 transactionHash:
-
hash
:String
, 32 Bytes - 交易的哈希值检吆。 -
nonce
:Number
- 發(fā)送者在此之前進(jìn)行的交易次數(shù)舒萎。 -
blockHash
:String
, 32 Bytes - 此交易所在的區(qū)塊的哈希值。當(dāng)其掛起時(shí)為null
蹭沛。 -
blockNumber
:Number
- 此事務(wù)所在的區(qū)塊編號(hào)逆甜。當(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ù):
-
String|Number
- 區(qū)塊號(hào)或散列〗穸梗或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”嫌拣,“l(fā)atest” 或 “pending”。 -
Number
- 交易索引呆躲。 -
Function
- (可選)如果傳遞回調(diào)异逐,則 HTTP 請(qǐng)求將成為異步。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息插掂。
返回值:
Object
- 交易對(duì)象灰瞻,參考 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í)辅甥。請(qǐng)注意酝润,交易回執(zhí)不適用于待處理的交易。
參數(shù):
-
String
- 交易哈希璃弄。 -
Function
- (可選)如果傳遞回調(diào)袍祖,則 HTTP 請(qǐng)求將成為異步。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息谢揪。
返回值:
Object
- 交易回執(zhí)對(duì)象蕉陋,當(dāng)交易回執(zhí)不存在時(shí)返回 null
。
-
blockHash
:String
, 32 Bytes - 此交易所在的塊的哈希值拨扶。 -
blockNumber
:Number
- 此交易所在的區(qū)號(hào)凳鬓。 -
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
- 此交易生成的日志對(duì)象數(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ù):
-
String
- 從中獲取交易數(shù)量的地址船侧。 -
String|Number
- 區(qū)塊號(hào)或散列欠气。或者是默認(rèn)區(qū)塊參數(shù)中的字符串 “earliest”镜撩,“l(fā)atest” 或 “pending”预柒。 -
Function
- (可選)如果傳遞回調(diào),則 HTTP 請(qǐng)求將成為異步袁梗。請(qǐng)參閱此處說(shuō)明以獲取詳細(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ù):
-
Object
- 待發(fā)送的交易對(duì)象。
-
from
:String
- 發(fā)送帳戶的地址投放。如果未指定奈泪,則使用 web3.eth.defaultAccount 屬性。 -
to
:String
- (可選)消息的目標(biāo)地址灸芳,未定義合同創(chuàng)建交易涝桅。 -
value
:Number|String|BigNumber
- (可選)以 Wei 為單位進(jìn)行幣轉(zhuǎn)移的交易,如果是合約創(chuàng)建交易烙样,也是捐贈(zè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 的自己的掛起交易。
-
Function
- (可選)如果傳遞回調(diào)爪膊,則 HTTP 請(qǐng)求將成為異步权悟。請(qǐng)參閱此處說(shuō)明以獲取詳細(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ù):
-
String
- 以 HEX 格式簽署的交易數(shù)據(jù)。 -
Function
- (可選)如果傳遞回調(diào)件豌,則 HTTP 請(qǐng)求將成為異步疮方。請(qǐng)參閱此處說(shuō)明以獲取詳細(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ù):
-
String
- 要簽名的地址珠洗。 -
String
- 要簽名的數(shù)據(jù)溜歪。 -
Function
- (可選)如果傳遞回調(diào),則 HTTP 請(qǐng)求將成為異步许蓖。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息蝴猪。
返回值:
String
- 簽名數(shù)據(jù)。在十六進(jìn)制前綴之后膊爪,字符對(duì)應(yīng)于 ECDSA 值自阱,如下所示:
r = signature[0:64]
s = signature[64:128]
v = signature[128:130]
請(qǐng)注意,如果使用的是 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í)行跳芳,但從未開(kāi)采到區(qū)塊鏈中哼丈。
參數(shù):
-
Object
- 交易對(duì)象參見(jiàn) web3.eth.sendTransaction,區(qū)別在于對(duì)于調(diào)用筛严,from 屬性也是可選的醉旦。 -
Number|String
- (可選)如果傳遞此參數(shù),則不會(huì)使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊桨啃。 -
Function
- 方法 - (可選)如果傳遞回調(diào)车胡,則 HTTP 請(qǐng)求將成為異步。請(qǐng)參閱此處說(shuō)明以獲取詳細(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í)行析命,但從未開(kāi)采到區(qū)塊鏈中并返回使用的 gas 量主卫。
參數(shù):
請(qǐng)參閱 web3.eth.sendTransaction逃默,但所有屬性都是可選的。
返回值:
Number
- 用于模擬調(diào)用/交易的用過(guò)的 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ù):
-
String|Object
- 字符串 “l(fā)atest” 或 “pending” 分別用于監(jiān)視最新區(qū)塊或待處理交易中的更改完域。或者過(guò)濾器選項(xiàng)對(duì)象如下:
-
fromBlock
:Number|String
- 最早的區(qū)塊的數(shù)量(latest
可能是指最近和pending
當(dāng)前挖掘區(qū)塊)瘩将。默認(rèn)情況下latest
吟税。 -
toBlock
:Number|String
- 最新區(qū)塊的編號(hào)(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
- 具有以下方法的過(guò)濾器對(duì)象:
-
filter.get(callback)
: 返回適合過(guò)濾器的所有日志條目天试。 -
filter.watch(callback)
: 監(jiān)視適合過(guò)濾器的狀態(tài)更改并調(diào)用回調(diào)槐壳。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息。 -
filter.stopWatching()
: 停止監(jiān)視并卸載節(jié)點(diǎn)中的過(guò)濾器喜每。一旦完成务唐,應(yīng)始終調(diào)用。
觀察回調(diào)返回值:
-
String
- 使用 “l(fā)atest” 參數(shù)時(shí)带兜,它返回最后一個(gè)傳入?yún)^(qū)塊的區(qū)塊哈希枫笛。 -
String
- 使用 “pending” 參數(shù)時(shí),它返回最近掛起交易的交易哈希刚照。 -
Object
- 使用手動(dòng)過(guò)濾器選項(xiàng)時(shí)刑巧,它返回一個(gè)日志對(duì)象,如下所示:-
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ū)塊編號(hào)。當(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))困肩,除非使用匿名說(shuō)明符聲明了事件。) -
type
:STRING
- 日志掛起時(shí)pending
脆侮。如果已經(jīng)開(kāi)采了日志锌畸,則mined
。注意有關(guān)事件篩選器返回值靖避,請(qǐng)參閱合約事件潭枣。
-
示例:
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)建合約對(duì)象,該對(duì)象可用于在地址上啟動(dòng)合約幻捏∨枥纾可以在此處閱讀最新有關(guān)事件的更多信。
參數(shù):
Object
- 合約對(duì)象篡九,可以按如下方式啟動(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..'
合約對(duì)象公開(kāi)合約的方法榛臼,可以使用參數(shù)和交易對(duì)象調(diào)用這些方法伊佃。
參數(shù):
-
String|Number|BigNumber
- (可選)零個(gè)或多個(gè)函數(shù)參數(shù)。如果傳入一個(gè)字符串沛善,則必須將其格式化為十六進(jìn)制數(shù)字航揉,例如 “0xdeadbeef” 如果已經(jīng)創(chuàng)建了 BigNumber 對(duì)象,那么也可以通過(guò)它金刁。 -
Object
- (可選)(previous)last 參數(shù)可以是交易對(duì)象帅涂,有關(guān)詳細(xì)信息,請(qǐng)參閱 web3.eth.sendTransaction 參數(shù) 1尤蛮。注意:不會(huì)考慮 data 和 to 屬性媳友。 -
Number|String
- (可選)如果傳遞此參數(shù),則不會(huì)使用 web3.eth.defaultBlock 設(shè)置的默認(rèn)區(qū)塊抵屿。 -
Function
- 方法 - (可選)如果傳遞回調(diào)庆锦,則 HTTP 請(qǐng)求將成為異步。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息轧葛。
返回值:
String
- 如果它調(diào)用結(jié)果數(shù)據(jù)搂抒,如果是發(fā)送交易的創(chuàng)建合約地址或交易哈希艇搀,請(qǐ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);
});
可以使用過(guò)濾器等事件求晶,它們具有相同的方法焰雕,但可以傳遞不同的對(duì)象來(lái)創(chuàng)建事件過(guò)濾器。
參數(shù):
-
Object
- 要過(guò)濾日志的索引返回值芳杏,例如{'valueA':1矩屁,'valueB':[myFirstAddress,mySecondAddress]}爵赵。默認(rèn)情況下吝秕,所有過(guò)濾器值都設(shè)置為null
。這意味著空幻,它們將匹配從此合同發(fā)送的任何給定類型的事件烁峭。 -
Object
- 其他過(guò)濾選項(xiàng),請(qǐng)參閱用過(guò)濾器參數(shù) 1了解更多信息默認(rèn)情況下秕铛,filterObject 將字段 “address” 設(shè)置為合約的地址约郁。第一個(gè)主題是事件的簽名。 -
Function
- (可選)如果將回調(diào)作為最后一個(gè)參數(shù)傳遞但两,它將立即開(kāi)始監(jiān)聽(tīng)鬓梅,無(wú)需調(diào)用 myEvent.watch(function(){})。請(qǐng)參閱此處說(shuō)明以獲取詳細(xì)信息谨湘。
回調(diào)返回值:
Object
- 一個(gè)事件對(duì)象如下:
-
address
:String
, 32 Bytes - 此日志源自的地址绽快。 -
args
:Object
- 來(lái)自事件的參數(shù)。 -
blockHash
:String
, 32 Bytes - 此日志所在區(qū)塊的哈希值悲关。當(dāng)其掛起時(shí)為null
谎僻。 -
blockNumber
:Number
- 此日志所在的區(qū)塊編號(hào)娄柳。當(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ù):
-
Object
- 其他過(guò)濾選項(xiàng),請(qǐng)參閱用過(guò)濾器參數(shù) 1了解更多信息默認(rèn)情況下蕉朵,filterObject 將字段 “address” 設(shè)置為合約的地址崔涂。第一個(gè)主題是事件的簽名。 -
Function
- (可選)如果將回調(diào)作為最后一個(gè)參數(shù)傳遞始衅,它將立即開(kāi)始監(jiān)聽(tīng)冷蚂,無(wú)需調(diào)用 myEvent.watch(function(){})缭保。請(qǐng)參閱此處說(shuō)明以獲取詳細(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)目源代碼會(huì)逐步上傳到 Github艺骂,地址為 https://github.com/windstamp/jsonrpc。
Contributor
- Windstamp, https://github.com/windstamp
Reference
- https://github.com/ethereum/wiki/wiki/JavaScript-API
- https://github.com/ethereum/web3.js
- https://web3js.readthedocs.io/en/1.0/index.html
- https://github.com/ethereum/wiki/wiki/JSON-RPC
- https://github.com/ethereum/web3.js/tree/master/example
- https://github.com/ethereum/wiki/wiki/Useful-%C3%90app-Patterns#examples
- https://github.com/ethereum/wiki/wiki/web3js-api-reference
- http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/
- https://github.com/MikeMcl/bignumber.js/
- https://web3.learnblockchain.cn/0.2x.x/