您好,我正在尝试创建一个函数,允许我根据传递给父“blockchainCall”函数的动态变量传递合约函数名称和 send()/call() 等变量。
到目前为止,我所发现的似乎只是使用字符串调用函数,但如果您看到原始示例,那不是我想要做的。在 await 调用中链接了多个元素,所以我不确定在这里采用什么方法。有什么想法吗?
async function blockchainCall(contract, action, method, val) {
let Method = method(val);
let Action = action();
await contract.methods.Method.Action.then((value) => {
return value;
})
.catch((error) => {
return error;
});
/* original example */
await contract.methods.ownerOf(val).call( {from: account[0], value: price} ).then((value) => {
return value;
})
.catch((error) => {
return error;
});
}
您可以访问带有字符串签名的方法作为 JS
contract
实例的关联数组项。
blockchainCall()
函数可以返回解析为返回值的承诺。
pragma solidity ^0.8;
contract MyContract {
function foo() external {}
function ownerof(uint256 tokenId) external pure returns (address) {
return address(0x123);
}
}
function blockchainCall(contract, action, method, val) {
return new Promise((resolve, reject) => {
contract.methods[method](val)[action]().then((value) => {
resolve(value);
}).catch((error) => {
reject(error);
});
});
}
const owner = await blockchainCall2(contract, "call", "ownerof(uint256)", 1);
console.log(owner);