这个查看一个工具即可extract-js-contract
这个工具可以实时把最新合约的代码解析出来
需要经过3步:
- 第一步: 获取历史版本的 setcode 以及 setabi 的data,这些信息在区块链浏览器上有
- 第二步: 通过学习事务 Transactions 解码知识 解码合约代码
- 第三步:单独解码 setabi 的 data.abi 数据
看一个数据:
数据 data (由于 value 太长,省略了 code 字段):
{
"account": "silver123451",
"vmtype": 0,
"vmversion": 0,
"code": "504b03042d...."
}
小提示 code 的value 前缀是 "504b03042d" 则表示是 JavaScript 合约,否则是 C++ 合约。
数据 data (由于 value 太长,省略了 abi 字段):
{
"account": "silver123451",
"abi": "0e656f7....."
}
const zip = require("zip");
const fs = require("fs");
fs.mkdir("./codes/");
let zipfile = zip.open(Buffer.from(code, "hex")); //code 是 setcode 的 data.code;
zipfile.extractAll('./codes/');
const FIBOS = require("fibos.js");
const fibos = FIBOS();
let rawdata = FIBOS.modules.Fcbuffer.fromBuffer(fibos.fc.structs.abi_def, Buffer.from(abidata, 'hex'));
console.log(rawdata);
输出:
{
"version": "eosio::abi/1.0",
"types": [],
.
.
.more
}