2017-12-22 34 views
0

스마트 계약을 전개 할 때 내 플랫폼의 사용자 (모바일 또는 웹)와 어떻게 상호 작용할 수 있습니까? 의 나는 다음과 같은 계약이 있다고 가정 해 봅시다 : 위해사용자는 현명한 계약을 어떻게해야합니까?

contract Test { 
    event Log(address addr); 

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

내가 사용자의 개인 키와 공개 키에 대한 액세스 권한이 있어야 사용할 수 있습니다. 사용자가 자신의 자격 증명 없이도 자신의 계정을 통해 블록 체인과 상호 작용할 수 있도록 허용 할 수 있습니까?

답변

1

우선 Remix을 사용하여 블록 체인에 계약을 전개하려고 시도한 경우. 그리고 생성 된 계약서에 작성한 API를 사용했습니다. 실제로 웹을 통해 계약서와 상호 작용합니다. 이 비디오를 훑어 보면 계약 내에서 통화 기능을 배포하고 사용하는 방법을 알 수 있습니다. 이걸 video으로보고 its tutorial here을 해보시기 바랍니다.

함수 (공개)를 호출하려는 경우 계약을 사용할 수 있도록 세 단계가 있습니다.

단계 1 : Blockchain에 계약을 전개하고 ABI 및 계약 주소를 찾으십시오. 예를 들어, 계약 전개를 위해 리믹스를 사용한 경우, 컴파일 탭의 세부 사항을 클릭하여이 정보를 볼 수 있습니다.

enter image description here

단계 : web3를 설정하여 인스턴스를 같은 계약 API를 만들기 : web3를 사용하고 웹 브라우저에 주입

STEP 세 (당신이 web3 이미 브라우저에 주입이 다음 Metamask 설치) 공급자 및 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) 

추신 : 당신이 어떠한 질문이나 문제가 있으면 저에게 연락하십시오 (그것은 하나 개의 게시물을 모두 설명하기 어렵다)!

+1

감사합니다. 좋은 설명. 나는 지금까지 MetaMask를 몰랐다. –

1

예. 일반적으로 이것이 작동하는 방식은 자바 스크립트 (web3 : https://github.com/ethereum/web3.js/)를 사용하여 스마트 계약서와 상호 작용하는 호스팅 웹 앱을 보유한 것입니다. 사용자가 웹 앱으로 이동 한 다음 계정이 연결되어 계약을 요청할 수 있습니다. 계정보기를 메타 마스크로 연결하는 방법을 이해하려면 https://metamask.io/이거나 ethereum 노드 (예 : geth/패리티)를 실행해야합니다. 다음은 Truffle이라는 계약 개발 프레임 워크 인 http://truffleframework.com/tutorials/pet-shop을 사용하여 느슨하게 설명한 워크 플로우를 설명하는 좋은 자습서입니다.

편집 : 자격 증명에 대한 질문에 대답하면 아무 것도 자격 증명이 필요 없습니다.

+0

도움을 주셔서 감사합니다! –