Caver-js 컨트랙트 deploy 시 transactionHash를 어떻게 받을 수 있나요?

Node.js에서 caver-js를 사용하여 NFT 컨트랙트를 배포하는 작업중입니다.

배포는 성공했지만 배포 직후 transactionHash값을 어떻게 가져와야 할지 모르겠습니다.

배포는 await contract.deploy().send() 형식으로 실행했는데 리턴받은 결과값에서 transactionHash값은 포함되어있지 않습니다.

event emitter 방식인 .on(‘transactionHash’, function() {…}) 형식으로 해봐도 on() is not a function 에러만 출력됩니다.

확인후 답변해주시면 정말 감사하겠습니다. 아래는 제가 작성한 코드 형식입니다.

		const caver = new Caver('https://api.baobab.klaytn.net:8651');
		const deployer = caver.wallet.add(caver.wallet.keyring.createFromPrivateKey(private_key));
		const contract = new caver.contract(abi);
		console.log('contract', contract);

		const deploy_paramters = {
			data: bytecode, 
			arguments: contract_arguments
		};
		console.log('deploy_paramters', deploy_paramters);

		const send_options = {
			from: deployer['_address'],
			gas: 2000000,
		};
		console.log('send_options', send_options);

		const deploy_result = await contract.deploy(deploy_paramters).send(send_options);
		console.log('deploy_result', deploy_result);

리턴받은 deploy_result값은 Contract객체인 것 같습니다.
값의 내용이 길어서 올리지 않았는데 요청해주시면 올리겠습니다.

안녕하세요. 질문해 주셔서 감사합니다.
일단 디폴트 deploy의 리턴값은 배포된 컨트랙트를 사용할 수 있는 Contract 객체입니다.

내부적으로 컨트랙트를 deploy 후, receipt을 받으면 contractDeployFormatter라는 함수를 통해 receipt의 contractAddress 필드를 사용하여 Contract 객체를 생성합니다.
이 때, receipt을 그대로 전달받기 위해서는 기존의 contractDeployFormatter을 대신하여 사용할 함수를 전달하면 됩니다.

이는 from과 gas가 정의된 send_options에 정의할 수 있으며 아래와 같이 정의하시면 됩니다.

{
    from: deployer['_address'],
    gas: 2000000,
    contractDeployFormatter: receipt => {
        return receipt
    },
}
1개의 좋아요

정확한 답변 덕분에 해결되었습니다.

감사합니다!

1개의 좋아요