そして、前のステップでは、開発を継続します
今日のタスク:
- ノードサーバを構築
- 実装と対話web3.jsイーサネット広場
- プライベートチェーンノードを構築するためのノードインストールツールガナッシュ、
- 郵便配達のテスト・インタフェースを使用します
ディレクトリ構造:
ノードサーバ(server.js)を構築します
VAR HTTP =( "HTTP"を必要); のvar URL =( "URL"を必要); のvarのQueryStringを=( 'のQueryString'が必要です); 関数スタート(ルート、ハンドル){ 関数onRequest(リクエスト、レスポンス){ VARのパス名= URL .parse(request.url).pathname; VAR本体= '' ; // 要求がポストに蓄積本体データ受信されるたびに request.on( 'データ'、関数(チャンク){ 本体 + =チャンク; // 本体=チャンクは、要求favicon.icoをので、身体が等しくなる場合、+ =を使用してください} { )}; // 非同期、非同期要求を処理するのawait request.on(「終了」、非同期関数(){ // 解像度パラメータ 本体querystring.parse =(本体); // 文字列は、オブジェクトをデシリアライズ // JSONデータを返し、問題クロスドメイン解決 応答を.writeHead(200 { "テキスト/ JSON"、 "アクセス制御-許可原点": "コンテンツタイプ" "*"である}); VARのコンテンツ= のawait経路(ハンドル、パス名、本体) のResponse.Write (JSON.stringify(コンテンツ)); Response.Endの(); }); } http.createServer(onRequest).listen( 9999 ); はconsole.log( ".. Serverが開始されました" ); } exports.start =始めます。
実装と対話web3.jsイーサネット広場(requestHandler.js)
// テスト 機能テスト(本体){ リターン 'の検索結果' ; } // アカウントを作成 非同期関数{newAccount(体) VaRのアカウント= "アカウント" ; // はconsole.log(body.passwordを) のawait web3.eth.personal .newAccount(body.password、関数(誤差、データ){ にconsole.log( "新規アカウント作成アドレス:" + データ) アカウント = データ; }); sendToAccount(アカウント、 '10' ); 戻りアカウント; } / / ユーザーへの転送 非同期関数sendToAccount(口座、金額){ VARの結果= のawaitのunlockAccount(adminaccountは、adminPasswordの); IF(結果){ // 管理者アカウントのロックを解除 web3.eth.sendTransactionを({ から:adminaccountは、 へ:アカウント、 値:web3.utils .toWei(AMOUNT) }、関数(誤差、データ){ にconsole.log( "トランザクションのハッシュ値:" + データ); }); } } // ロック解除アカウント 非同期関数unlockAccount(アカウント、パスワード){ VARの =検索結果を偽 ; web3.eth.personal.unlockAccountのawait(アカウント、パスワード、 300、関数(誤差、データ){ にconsole.log(アカウント + "結果アンロック:" + データ); 結果 = データ; }); 戻り値の結果を; } // 配備契約転送方法は戻り値がないため、エラーがserver.jsう 非同期関数展開(本体){ VARのアカウント= body.account; VARのパスワード= body.password; にconsole.log(アカウント);
VARのアドレス= のawait deployContractを(アカウント); はconsole.log( "アドレス:" + アドレス); リターン{ 'contractAddress' :アドレス}。 } // 部署合约 機能deployContract(アカウント){ 返す 新しい約束(機能拒否)、(決意を{ bn.deploy({ データ:バイトコード 。})({送る から:アカウント、 ガス: 3000000 、 gasPrice: '3000億' } 、関数(誤差、データ){ // データ:交易的哈希值 にconsole.log(エラー) にconsole.log(データ); }。)(上の '領収書'、関数(領収書){ はconsole.log( '合约的地址:' + receipt.contractAddress)//が含まれている新しい契約アドレス // contractAddress = receipt.contractAddress; // TODO异步的问题 の決意(receipt.contractAddress)。 }); }); // contractAddressを返します。 } // 添加笔记 非同期関数addNote(本体){ VARのタイトル= body.title。 するvar DESC = body.desc。 VARの内容= body.content。 VaRのアカウント= body.account。 VaRのパスワード=body.password; VARの DATE = getNowFormatDate(); VARの ID = web3.utils.sha3(新しい新しい日付()getTime()DESC + + +タイトル。コンテンツ); VARの contractAddress = body.contractAddress; VARの結果= のawaitのunlockAccount(アカウント、パスワード); IF(結果){ // ロックを解除、ユーザーの現在のアカウントエーテルスクエア bn.options.address = contractAddress; bn.methods.addNote(DATE、ID、タイトル、DESC、コンテンツ).send({ から:アカウント } 、関数(誤差、データ){ // データ:メソッド呼び出しの後の値を返す リターン'成功' ; }); } } // ノートの一覧を取得 非同期機能getNoteList(ボディ){ VARの DATE = ; body.date するvar COUNT = body.count; VARのアカウント= body.account; VARのパスワード= body.passwordを、 VAR = contractAddress body.contractAddress; VARの結果= のawaitのunlockAccount(アカウント、パスワード); IF(結果){ // ユーザーの現在のアカウントエーテルスクエアアンロック bn.options.address = contractAddressを。 bn.methods.getNodeList(DATE、COUNT)は.call( { から:アカウント }、関数(誤差、データ){ // データ:メソッド呼び出し後の値を返す }); } } // メモを得る 非同期関数getNoteを(本体){ VARの DATE = body.date; VARの ID = body.id; VARのアカウント= body.account; VARのパスワード= body.password; VAR contractAddress = body.contractAddress; VARの結果= ザはunlockAccount(アカウント、パスワード)を待ちます。 IF(結果){ //ユーザの現在のアカウントエーテルスクエアをロック解除 bn.options.address = contractAddress; bn.methods.getNode(DATE、ID)は.call({ から:アカウント }、関数(誤差、データ){ // データ:呼び出し元のメソッドの後に値を返す )}; } } // 現在の時刻を取得し、MM-DD形式のYYYYの 機能getNowFormatDate(){ VARの DATE = 新しい新しい日付(); VARの seperator1 = " - " ; するvar年= DATE。 getFullYear(); VARの月date.getMonth =()+ 1 ; VARstrDate = date.getDate()。 もし(月> = 1 &&月<= 9 ){ 月 = "0" + 月; } であれば(strDate> = 0 && strDate <= 9 ){ strDate = "0" + strDate。 } のvar CURRENTDATE =年+ seperator1 +月+ seperator1 + strDate。 リターンCURRENTDATE。 } exports.test = 試験。 exports.newAccount = newAccount。 exports.deployは = 展開します。 exports.addNote = addNote。 exports.deployContract = deployContract。
ノードインストールツールガナッシュ、プライベートチェーンノードを構築
ポータル:https://truffleframework.com/ganache
ガナッシュ10テストアカウントを提供し、各アカウントは、テストを容易にするために、100及びイーサネット・クレジットを有しています
ここで私は、最初のテストの一つでした
まず、要求されたweb3チェーンプライベートノードのアドレスへのアドレス(requestHandle.js)
constのweb3 = 新しい Web3(新 Web3.providers.HttpProvider( 'http://127.0.0.1:7545'));
プライベートチェーンのノードアドレスは、ガナッシュの上に表示することができます
ノードサーバを起動します
郵便配達のテスト・インタフェースを使用します
「結果」を返す試験試験方法は、nodejsがサーバにアクセスすることができる説明しました。
他の方法は、多くの説明がない、連続して試験しました。