일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- nestjs 튜토리얼
- 컨트렉트 배포 자동화
- ethers type
- 프록시배포구조
- Vue.js
- git rebase
- 스마트컨트렉트테스트
- 러스트기초
- 체인의정석
- 스마트컨트렉트 예약어 함수이름 중복
- chainlink 설명
- vue기초
- 깃허브명령어
- rust 기초
- nest.js설명
- Vue
- ethers typescript
- 컨트렉트 동일한 함수이름 호출
- multicall
- 스마트컨트렉트프록시
- 머신러닝기초
- SBT표준
- 스마트 컨트렉트 함수이름 중복
- ethers websocket
- ambiguous function description
- 러스트 기초
- ethers
- ethers v6
- 러스트 기초 학습
- 스마트컨트렉트 함수이름 중복 호출
Archives
- Today
- Total
체인의정석
truffle 활용법) ABI 파일 추출하여 이미 배포된 컨트렉트와 상호작용하기 본문
728x90
반응형
클레이튼 환경에서의 개발 및 배포를 위하여 ABI를 모듈로 만들고 이를 불러와서 사용하는 작업을 진행하였다.
먼저 ABI를 모듈로 만드는 부분은 다음과 같이 진행된다.
const ExampleABI = [...]
module.exports = {
ExampleABI
}
그럼 이걸 가져오는 파일에서는 아래와 같이 코드를 작성할 수 있다.
https://web3js.readthedocs.io/en/v1.7.3/web3-eth-contract.html
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 해주는 과정이 필요한 것 같다.
찾아보니 따옴표를 넣어주어야 한다고 한다.
- 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를 붙인다. 안그럼 에러가 난다.
await exampleContractInstance.methods.exampleFunction(input).send({from: 보내는 지갑주소})
728x90
반응형
'블록체인 > Solidity' 카테고리의 다른 글
기존 소스를 실행 시킬 경우 오래된 오픈 제플린 코드 버전 맞추기 (0) | 2022.06.22 |
---|---|
스마트컨트렉트 가스비 손쉽게 측정하기 (0) | 2022.05.30 |
컨트렉트에서 데이터 encode 및 decode 하기 (0) | 2022.05.22 |
Solidity에서 bytes와 bytes32의 유즈케이스 및 활용 문법 (0) | 2022.05.18 |
논문에 사용하는 컨트렉트 구조 및 스마트컨트렉트 0.8 버전으로 구현한 주요 구문 정리 (Travel Rule Solution Example.sol) (0) | 2022.05.15 |
Comments