2017-12-22 33 views
0

スマート契約を展開するとき自分のプラットフォーム(モバイルまたはウェブ)のユーザーがそのユーザーと対話できるようにするにはどうすればよいですか? のは、私は、次の契約を持っているとしましょう:ユーザーはスマートな契約とどのように対話する必要がありますか?

contract Test { 
    event Log(address addr); 

    function logMe() public { 
     Log(msg.sender); 
    } 
} 

私は、ユーザーの秘密鍵と公開鍵へのアクセス権を持っている必要があり、それを使用するために。クレデンシャルを持たなくても、ユーザーが自分のアカウントでブロックチェーンとやり取りできるようにすることは可能ですか?

答えて

1

まず、Remixを使用してブロックチェーンに契約を展開しようとした場合。そして、作成した契約に作成したAPIを使用しました。実際には、Webで契約とやり取りしています。このビデオをスキミングして、契約内にコール機能を導入して使用する方法を確認できます。このvideoを見てits tutorial hereを実行することをおすすめします。

機能を呼び出す場合は(公開)契約を使用できるように3つの手順があります。

ステップ1:Blockchainに契約を展開し、ABIと契約アドレスを探します。たとえば、契約を展開するためにリミックスを使用した場合は、[コンパイル]タブの詳細をクリックしてこれらの情報を表示します。

enter image description here

STEP TWO:web3を使用し、Webブラウザに注入(Metamaskをインストールし、あなたがweb3が既にブラウザに注入されてい)

STEP 3:web3を設定することで、インスタンスのような契約のAPIを作成しますプロバイダとABIとステップ1から取得した契約アドレスを入力します。

ステップ4:契約機能を呼び出します。ここで

あなたはweb3がすでに注入され、あなたが右blockchainに接続されていることを確認してください方法です(TestNet/MainNet)ここで

var Web3 = require('web3'); 

if (typeof web3 !== 'undefined') { 
    // Use Mist/MetaMask's provider 
    console.log('Web3 exist!') 
    console.log(web3) 
    web3 = new Web3(web3.currentProvider); 

    web3.version.getNetwork((err, netId) => { 
     switch (netId) { 
     case "1": 
      console.log('This is mainnet') 
      break 
     case "2": 
      console.log('This is the deprecated Morden test network.') 
      break 
     case "3": 
      console.log('This is the ropsten test network.') 
      break 
     default: 
      console.log('This is an unknown network.') 
     } 
    }) 

} else { 
    console.log('No web3? You should consider trying MetaMask!') 
    // fallback - use your fallback strategy (local node/hosted node + in-dapp id mgmt/fail) 
    web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); 
} 

はあなたの展開の契約と対話することができる方法です。

var fooContract = web3.eth.contract(YOUR_ABI, (err, ctr) => { return ctr}); 
    web3.eth.defaultAccount = web3.eth.accounts[0]; 
    $scope.accounts = web3.eth.accounts; 

    console.log(web3.eth.defaultAccount); 
    var CONTRACT = fooContract.at('YOUR_Deployed_contract_ADDRESS',(err, ctr)=>{ 
     return ctr; 
    }) 

今すぐCONTRACT変数を使用して、そのパブリック関数を呼び出すことができます。

コールは次のようになります。

CONTRACT.contractFunction(params) 

PSは:あなたが質問や問題がある場合はご連絡ください(これは、1つの記事ですべてを説明するのは難しいです)!

+1

ありがとう!素晴らしい説明。私は今までMetaMaskを知らなかった。 –

1

はい。通常、これが動作する方法は、あなたのスマートな契約とやりとりするためにjavascript(web3:https://github.com/ethereum/web3.js/を参照)を使用するホストされたWebアプリを持っているということです。ユーザーはあなたのウェブアプリにナビゲートし、そのアカウントが接続され、契約書に要求を送信できるようになります(アカウントの外観をメタマスクに接続する方法を理解する:https://metamask.io/またはethereumノード、たとえばgeth /パリティ)。ここでは、Truffleというコントラクト開発フレームワークを使ってゆるく記述されたワークフローについて説明する良いチュートリアルです:http://truffleframework.com/tutorials/pet-shop

EDIT:資格情報に関する質問に答えるために、資格情報を持っている必要はありません。

+0

助けてくれてありがとう! –

関連する問題