체인의정석

truffle 활용법) ABI 파일 추출하여 이미 배포된 컨트렉트와 상호작용하기 본문

블록체인/Solidity

truffle 활용법) ABI 파일 추출하여 이미 배포된 컨트렉트와 상호작용하기

체인의정석 2022. 5. 23. 13:55
728x90
반응형

클레이튼 환경에서의 개발 및 배포를  위하여 ABI를 모듈로 만들고 이를 불러와서 사용하는 작업을 진행하였다.

먼저 ABI를 모듈로 만드는 부분은 다음과 같이 진행된다.

const ExampleABI = [...]
module.exports = {
	ExampleABI
}

그럼 이걸 가져오는 파일에서는 아래와 같이 코드를 작성할 수 있다.

https://web3js.readthedocs.io/en/v1.7.3/web3-eth-contract.html

 

web3.eth.Contract — web3.js 1.0.0 documentation

The web3.eth.Contract object makes it easy to interact with smart contracts on the ethereum blockchain. When you create a new contract object you give it the json interface of the respective smart contract and web3 will auto convert all calls into low leve

web3js.readthedocs.io

var myContract = new web3.eth.Contract([...], '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', {
    from: '0x1234567890123456789012345678901234567891', // default from address
    gasPrice: '20000000000' // default gas price in wei, 20 gwei in this case
});

이런식으로 [...] 자리에 ABI를 넣어주면 된다.

뒤에는 컨트렉트 주소를 넣어준다.

그런데 이렇게 하니 에러가 발생한다.

        const mappingABI = JSON.parse(MappingABI);
        mappingContractInstance = new web3.eth.Contract(mappingABI,mappingAddress);

이렇게 ABI를 가져올 때 parse 해주는 과정이 필요한 것 같다.

https://ethereum.stackexchange.com/questions/80671/error-you-must-provide-the-json-interface-of-the-contract-when-instantiating-a

 

Error: you must provide the json interface of the contract when instantiating a contract object

That's the error that occurs when I try to test my contract. Can someone tell me what the problem is? That's the code for the test: const assert = require('assert'); const fs = require('fs'); co...

ethereum.stackexchange.com

찾아보니 따옴표를 넣어주어야 한다고 한다.

https://itprogramming119.tistory.com/entry/%EC%97%90%EB%9F%AC%EC%BD%94%EB%93%9C-04-Unexpected-token-o-in-JSON-at-position-1

 

Unexpected token o in JSON at position 1 해결 방법

Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse() 에러 해결 방법에 대하여 알아보겠습니다. 이 에러코드의 발생 원인은 다음과 같습니다. 1. json 형식의 문자열이 맞는지? 2. j..

itprogramming119.tistory.com

  • copy paste the abi of your contract in a json file
  • read the file : const contractJson = fs.readFileSync('path_to_abi_file.json');
  • parse the file : const abi = JSON.parse(contractJson);
  • instantiate the contract : contractInstance = new web3.eth.Contract(abi);

아 그래서, readFile Sync를 한 것일 수도 있다. 보니까 build에 js 파일이 들어가 있는걸 볼 수 있엇다. 이걸 그대로 써주면 되는거 같다.

const fs = require('fs'); //상단에추가
.
.
.

const exampleJson = fs.readFileSync('../../build/contracts/Example.json');
const exampleABIJSON = JSON.stringify(exampleABI.abi)
exampleContractInstance = new web3.eth.Contract(exampleABIJSON,mappingAddress);

이렇게 하면 된다.

 

그리고 이걸 가져와서 함수를 실행할땐 .methods를 붙인다. 안그럼 에러가 난다.

https://web3js.readthedocs.io/en/v1.7.3/web3-eth-contract.html?highlight=new%20web3.eth.Contract#id28 

 

web3.eth.Contract — web3.js 1.0.0 documentation

The web3.eth.Contract object makes it easy to interact with smart contracts on the ethereum blockchain. When you create a new contract object you give it the json interface of the respective smart contract and web3 will auto convert all calls into low leve

web3js.readthedocs.io

 

await exampleContractInstance.methods.exampleFunction(input).send({from: 보내는 지갑주소})

 

728x90
반응형
Comments