Web3.jsの基本的な使用法(Ethereumスマートコントラクトとの相互作用)

web3.jsの紹介

•Web3JavaScriptアプリAPI

•web3.jsはJavaScriptAPIライブラリです。DAppをEthereumで実行するには、web3.jsライブラリによって提供されるweb3オブジェクトを使用できます。

•web3.jsはRPC呼び出しを介してローカルノードと通信し、RPCレイヤーを公開する任意のイーサリアムノードで使用できます

•web3には、ethオブジェクト-web3.eth(Ethereumブロックチェーンとの対話用)およびshhオブジェクト-web3.shh(Whisperとの対話用)が含まれています

web3モジュールの読み込み

•最初に、プロジェクトにweb3モジュールをインストールする必要があります。npminstall [email protected]
次に、web3インスタンスを作成し、「プロバイダー」を設定します。•MetaMaskによって設定されたプロバイダーが上書きされないようにするために、 web3の紹介では、通常、現在の環境チェックを行います(例としてv0.20.1を取り上げます)。

if (typeof web3 !== 'undefined') {
    
     
web3 = new Web3(web3.currentProvider); 
} else {
    
    
web3 = new Web3(new Web3.providers
.HttpProvider("http://localhost:8545")); 
}

非同期コールバック(コールバック)

•web3jsAPI設計の本来の目的は、主にローカルRPCノードで使用することであるため、同期HTTP要求はデフォルトで送信されます

•非同期リクエストを送信する場合は、関数の最後のパラメーター位置でコールバック関数を渡すことができます。コールバック関数はオプションです(optioanl)

•私たちが一般的に使用するコールバックスタイルは、「エラーファースト」と呼ばれるものです。例:

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

Promiseイベントのコールバック(v1.0.0)

•web3をさまざまな標準のすべてのタイプのプロジェクトに統合できるようにするために、バージョン1.0.0には非同期関数を処理するいくつかの方法が用意されています。ほとんどのweb3オブジェクトでは、コールバック関数を最後の関数引数として渡すことができ、関数呼び出しを連鎖させるためのpromiseを返します。

•ブロックチェーンシステムとして、リクエストにはさまざまなエンドステージがあります。この要件を満たすために、バージョン1.0.0は、そのような関数呼び出しの戻り値を、promiseとEventEmitterの組み合わせである「promiseevent」(promiEvent)にラップします。

•PromiEventは、.on、.once、および.offメソッドが追加され、promiseのように使用されます。

web3.eth.sendTransaction({
    
    from: '0x123...', data: '0x432...'}) 
.once('transactionHash', function(hash){
    
     ... }) 
.once('receipt', function(receipt){
    
     ... }) 
.on('confirmation', function(confNumber, receipt){
    
     ... }) 
.on('error', function(error){
    
     ... }) 
.then(function(receipt){
    
     
// will be fired once the receipt is mined });

アプリケーションバイナリインターフェイス(ABI)•web3.jsは、イーサリアムスマートコントラクトのjsonインターフェイス(アプリケーションバイナリインターフェイス、ABI)を介してJavaScriptオブジェクトを作成します。これは
、jsコードでの記述に使用されます。

•関数(関数)•タイプ:関数タイプ、デフォルトの「関数」、「コンストラクター」の場合もあります•定数、支払い可能、stateMutability:関数の状態の可変性
•入力、出力:関数入力、出力パラメーターの説明リスト
•イベント(イベント)•タイプ:タイプ、常に「イベント」•入力:名前、タイプ、インデックス付き
バッチリクエスト(バッチリクエスト)を含む入力オブジェクトのリスト•バッチリクエストを使用すると、リクエストを注文して、一緒に処理できます。

•注:一括リクエストは高速ではありません。実際、リクエストは非同期で処理されるため、一度に多くのリクエストを行う方が速い場合があります。

•バッチリクエストは、主にリクエストの順序を確認するために使用され、シリアルに処理されます。

var batch = web3.createBatch(); 
batch.add(web3.eth.getBalance.request('0x0000000000000000
000000000000000000000000', 'latest', callback)); 
batch.add(web3.eth.contract(abi).at(address).balance.request(a
ddress, callback2)); 
batch.execute();

共通API-基本情報クエリ

web3バージョンを表示

•v0.2x.x:web3.version.api
•v1.0.0:web3.version

web3が接続されているノードバージョン(clientVersion)を表示します

•同期:web3.version.node
•非同期:web3.version.getNode((error、result)=> {console.log(result)})
•v1.0.0:web3.eth.getNodeInfo()。then(console。ログ)

基本情報クエリ

ネットワークIDを取得する

•同期:web3.version.network
•非同期:web3.version.getNetwork((err、res)=> {console.log(res)})
•v1.0.0:web3.eth.net.getId()。then( console.log)

ノードのイーサリアムプロトコルバージョンを取得します

•同期:web3.version.ethereum
•非同期:web3.version.getEthereum((err、res)=> {console.log(res)})
•v1.0.0:web3.eth.getProtocolVersion()。then(console。ログ)

ネットワークステータスクエリ

接続/リッスンしているノードがあるかどうか、true/falseを返します

•同期:web3.isConnect()またはweb3.net.listening
•非同期:web3.net.getListening((err、res)=> console.log(res))
•v1.0.0:web3.eth.net.isListening( ).then(console.log)

現在接続されているピアノードを表示する

•同期:web3.net.peerCount
•非同期:web3.net.getPeerCount((err、res)=> console.log(res))
•v1.0.0:web3.eth.net.getPeerCount()。then(console。ログ)

プロバイダー

現在設定されているweb3プロバイダーを表示する

•web3.currentProvider

ブラウザ環境によって設定されたweb3プロバイダー(v1.0.0)を表示する•web3.givenProvider

セットプロバイダー

•web3.setProvider(プロバイダー)
•web3.setProvider(new web3.providers.HttpProvider('http:// localhost:8545'))

web3の一般的なツールアプローチ

エーテル単位変換

•web3.fromWeiweb3.toWei

データ型変換

•web3.toStringweb3.toDecimalweb3.toBigNumber

文字エンコード変換

•web3.toHexweb3.toAsciiweb3.toUtf8 web3.fromUtf8

アドレス関連

•web3.isAddressweb3.toChecksumAddressweb3.eth
–アカウント関連

コインベースクエリ

•同期:web3.eth.coinbase
•非同期:web3.eth.getCoinbase((err、res)=> console.log(res))
•v1.0.0:web3.eth.getCoinbase()。then(console.log)

アカウントのお問い合わせ

•同期:web3.eth.accounts
•非同期:web3.eth.getAccounts((err、res)=> console.log(res))
•v1.0.0:web3.eth.getAccounts()。then(console.log)

ブロック相関

ブロック高さクエリ

•同期:web3.eth.blockNumber
•非同期:web3.eth.getBlockNumber(コールバック)

gasPriceクエリ

•同期:web3.eth.gasPrice
•非同期:web3.eth.getGasPrice(コールバック)

ブロッククエリ

• 同步:web3.eth.getBlockNumber( hashStringOrBlockNumber
[ ,returnTransactionObjects] )
• 异步:web3.eth.getBlockNumber( hashStringOrBlockNumber, callback )
块中交易数量查询
• 同步:
web3.eth.getBlockTransactionCount( hashStringOrBlockNumber ) • 异步:
web3.eth.getBlockTransactionCount( hashStringOrBlockNumber
, callback )

トランザクション関連

バランス照会


_

取引のお問い合わせ

•同期:web3.eth.getTransaction(transactionHash)
•非同期:web3.eth.getTransaction(transactionHash [、callback])

トランザクション実行関連
•トランザクション受信クエリ(ブロック入力)
•同期:web3.eth.getTransactionReceipt(hashString)
•非同期:web3.eth.getTransactionReceipt(hashString [、callback])
•推定ガス消費量
•同期:web3.eth.estimateGas( callObject)
•非同期:web3.eth.estimateGas(callObject [、callback])

トランザクションを送信する

•web3.eth.sendTransaction(transactionObject [、callback])
•トランザクションオブジェクト:
•from:送信アドレス
•to:受信アドレス、それが契約作成トランザクションの場合、空白のままにすることができます
•値:トランザクション量、wei、オプション
•gas:トランザクションによって消費されるガスの上限、オプション
•gasPrice:トランザクションの単位ガス価格、オプション
•data:トランザクションによって運ばれる文字列データ、オプション
•nonce:整数のnonce値、オプション

メッセージコール

•web3.eth.call(callObject [、defaultBlock] [、callback])
•パラメーター:
•呼び出しオブジェクト:fromがオプションであることを除いて、トランザクションオブジェクトと同じ
•デフォルトブロック:デフォルトの「最新」。指定されたもので渡すことができます。ブロックの高さ
•コールバック関数(同期的に呼び出されるものがない場合)

var result = web3.eth.call({
    
     to: 
"0xc4abd0339eb8d57087278718986382264244252f", 
data: 
"0xc6888fa100000000000000000000000000000000000000000000000000
0 0000000000003" }); 
console.log(result);

ログフィルタリング(イベント監視)

web3.eth.filter( filterOptions [ , callback ] )
// filterString 可以是 'latest' or 'pending' 
var filter = web3.eth.filter(filterString); 
// 或者可以填入一个日志过滤 options 
var filter = web3.eth.filter(options); 
// 监听日志变化
filter.watch(function(error, result){
    
     if (!error) console.log(result); }); 
// 还可以用传入回调函数的方法,立刻开始监听日志
web3.eth.filter(options, function(error, result){
    
     
if (!error) console.log(result); 
});

契約関連-契約を作成します

web3.eth.contract
var MyContract = web3.eth.contract(abiArray); 
// 通过地址初始化合约实例
var contractInstance = MyContract.at(address); 
// 或者部署一个新合约
var contractInstance = MyContract.new([constructorParam1] 
[, constructorParam2], {
    
    data: '0x12345...', from: 
myAccount, gas: 1000000});

契約機能を呼び出す

• 可以通过已创建的合约实例,直接调用合约函数
// 直接调用,自动按函数类型决定用 sendTransaction 还是 call
myContractInstance.myMethod(param1 [, param2, ...] [, 
transactionObject] [, defaultBlock] [, callback]); 
// 显式以消息调用形式 call 该函数
myContractInstance.myMethod.call(param1 [, param2, ...] [, 
transactionObject] [, defaultBlock] [, callback]); 
// 显式以发送交易形式调用该函数
myContractInstance.myMethod.sendTransaction(param1 [, 
param2, ...] [, transactionObject] [, callback]); 

契約イベントを聞く

• 合约的 event 类似于 filter,可以设置过滤选项来监听
var event = myContractInstance.MyEvent({
    
    valueA: 23} 
[, additionalFilterObject]) 
// 监听事件
event.watch(function(error, result){
    
     if (!error) console.log(result); }); 
//还可以用传入回调函数的方法,立刻开始监听事件
var event = myContractInstance.MyEvent([{
    
    valueA: 23}] 
[, additionalFilterObject] , function(error, result){
    
     
if (!error) console.log(result); 
}
);

おすすめ

転載: blog.csdn.net/david2000999/article/details/120176244
おすすめ