ABI 디 코딩 이 더 리 움 트 랜 잭 션 입력 데이터 사용,gas free 감소
내 가 보 낸 transaction 을 예 로 들 면
{
hash: '0xcc1c866186ff39555936ea007a63ead761aef80d4301eb4e0081e8fc8f6fe18d',
nonce: 892,
blockHash: '0xbfff2fc0dd268dfce90417a3ea3b5da3a9e59703d8d4ec6a5be3ba2dce59b924',
blockNumber: 987,
transactionIndex: 0,
from: '0x40FB66078a2e688f83002930B7EbA981323d4bef',
to: '0x2C71AC97716A17E66D7E524Cfeb28B97A3728250',
value: '0',
gas: 5000000,
gasPrice: '10000000000',
input: '0x70a1495c00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000056f70656e31000000000000000000000000000000000000000000000000000000',
v: '0x1b',
r: '0xbfbd3aef6c6777598847de0aa1ffcaf50470f785054771a54e2e274b89d1a633',
s: '0x27aea35dd4d462598ac909b55444ec0131c7977fe2ad244eaac0cc28b70e07f1'
}
긴 input 필드 를 볼 수 있 습 니 다.이 필드 는
0x70a1495c
로 시작 합 니 다.이것 은 함수 서명 이 고 뒤의 데 이 터 는 유형 에 따라 데 이 터 를 연결 하 는 것 입 니 다.이 함수 의 abi 를 다시 보 겠 습 니 다.{
constant: false,
inputs: [
{ internalType: 'bytes', name: 'name', type: 'bytes' },
{ internalType: 'bool', name: 'isOpen', type: 'bool' },
{ internalType: 'bool', name: 'isCustom', type: 'bool' },
{ internalType: 'uint256', name: 'cusPrice', type: 'uint256' },
{ internalType: 'uint8', name: 'durationInYear', type: 'uint8' }
],
name: 'registerRoot',
outputs: [],
payable: false,
stateMutability: 'nonpayable',
type: 'function',
signature: '0x70a1495c'
}
signature 도
0x70a1495c
이 서명 이 어떻게 생 성 되 었 는 지 볼 수 있 습 니 다.사실은 간단 합 니 다.web3.eth.abi.encodeFunctionSignature("registerRoot(bytes,bool,bool,uint256,uint8)")
는 짧 은 Hash 입 니 다.제거0x70a1495c
한 후에 나머지 데 이 터 를 디 코딩 합 니 다.web3.eth.abi.decodeParameters(["bytes","bool","bool","uint256","uint8"],"0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000003782dace9d900000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000056f70656e31000000000000000000000000000000000000000000000000000000")
Result {
'0': '0x6f70656e31',
'1': true,
'2': true,
'3': '4000000000000000000',
'4': '1',
마지막 으로 필드 이름 을 맞 추 면 됩 니 다.스스로 해석 함 수 를 썼 습 니 다.다음 과 같 습 니 다.
async function decodeParamsOfTransaction(txHash, func_abi){
var txData = await web3.eth.getTransaction(txHash);
var input = txData.input;
var types = func_abi.inputs.map(x=>x.internalType);
var _d = "0x"+input.replace(func_abi.signature,"");
var names = func_abi.inputs.map(x=>x.name);
var r = web3.eth.abi.decodeParameters(types, _d);
var dic = {}
for(var i=0; i
다음 과 같은 결 과 를 얻 을 수 있 습 니 다:
{
name: '0x6f70656e31',
isOpen: true,
isCustom: true,
cusPrice: '4000000000000000000',
durationInYear: '1'
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ERC 20 - 분석 입력 데이터 자바 (transfer)maven 도입 문제. https://github.com/web3j/web3j/issues/489 다른 유사 성 은 당연히 abi json 을 미리 알 아야 한다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.