小さなクラウドアプリケーション開発ブロック鎖が(II)に基づく注意事項

そして、前のステップでは、開発を継続します

 

 

今日のタスク:

  • ノードサーバを構築
  • 実装と対話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がサーバにアクセスすることができる説明しました。

他の方法は、多くの説明がない、連続して試験しました。

おすすめ

転載: www.cnblogs.com/woshinixxk/p/10947769.html