如何在另一个合约中调用预装合约
How to invoke a pre-installed contract in another contract
首先我预装了一个合约A(address(A))。然后我安装一个合约 B (address(B)) 以使用调用接口调用 A。最后,我使用他的地址 (x) 调用合约。我本想用address(x)来调用A,但实际上是用address(B)来调用A,那么如何用address(x)来调用A呢?
pragma solidity ^0.4.21;
contract TransferERC20 {
event TransferEvent (
bool _flag,
string _invoiceId,
address _erc20ContractHash,
address indexed _from,
address indexed _to,
uint256 _value
);
function transfer(string _invoiceId, address _erc20ContractHash,address _from, address _to, uint256 _amount) public returns (bool) {
bytes4 methodTransfer = bytes4(keccak256("transfer(address,uint256)"));
if(_erc20ContractHash.call(methodTransfer, _to, _amount)) {
emit TransferEvent(true, _invoiceId, _erc20ContractHash, _from, _to, _amount);
return true;
}
emit TransferEvent(false, _invoiceId, _erc20ContractHash, _from, _to, _amount);
return false;
}
}
以上代码旨在调用预装在以太坊测试网上的ERC20合约。但是我调用失败,因为地址已更改为 TransferERC20 地址。如何使用TransferERC20调用者地址实现转账功能。 THKS.
代币持有者首先需要在 TransferERC20 合约的 ERC20 代币上使用 approve
设置配额,然后他们才能在 TransferERC20 合约上调用 transfer
,而后者应该调用 transferFrom
在 ERC20 代币上。
这需要两笔交易,一笔用于 approve
,一笔用于 transferFrom
.
如果您要创建 ERC20 令牌,您可能需要查看 OpenZeppelin 合约实施,看看它是否满足您的需求。
详情见文档:https://docs.openzeppelin.com/contracts/2.x/tokens#ERC20
或者,您可以考虑创建 ERC777 代币(无需在两个单独的交易中执行 approve
和 transferFrom
)。详情见文档:https://docs.openzeppelin.com/contracts/2.x/tokens#ERC777
如果您对使用 OpenZeppelin 有任何疑问,可以在社区论坛中提问:https://forum.openzeppelin.com/
披露:我是 OpenZeppelin 的社区经理
首先我预装了一个合约A(address(A))。然后我安装一个合约 B (address(B)) 以使用调用接口调用 A。最后,我使用他的地址 (x) 调用合约。我本想用address(x)来调用A,但实际上是用address(B)来调用A,那么如何用address(x)来调用A呢?
pragma solidity ^0.4.21;
contract TransferERC20 {
event TransferEvent (
bool _flag,
string _invoiceId,
address _erc20ContractHash,
address indexed _from,
address indexed _to,
uint256 _value
);
function transfer(string _invoiceId, address _erc20ContractHash,address _from, address _to, uint256 _amount) public returns (bool) {
bytes4 methodTransfer = bytes4(keccak256("transfer(address,uint256)"));
if(_erc20ContractHash.call(methodTransfer, _to, _amount)) {
emit TransferEvent(true, _invoiceId, _erc20ContractHash, _from, _to, _amount);
return true;
}
emit TransferEvent(false, _invoiceId, _erc20ContractHash, _from, _to, _amount);
return false;
}
}
以上代码旨在调用预装在以太坊测试网上的ERC20合约。但是我调用失败,因为地址已更改为 TransferERC20 地址。如何使用TransferERC20调用者地址实现转账功能。 THKS.
代币持有者首先需要在 TransferERC20 合约的 ERC20 代币上使用 approve
设置配额,然后他们才能在 TransferERC20 合约上调用 transfer
,而后者应该调用 transferFrom
在 ERC20 代币上。
这需要两笔交易,一笔用于 approve
,一笔用于 transferFrom
.
如果您要创建 ERC20 令牌,您可能需要查看 OpenZeppelin 合约实施,看看它是否满足您的需求。 详情见文档:https://docs.openzeppelin.com/contracts/2.x/tokens#ERC20
或者,您可以考虑创建 ERC777 代币(无需在两个单独的交易中执行 approve
和 transferFrom
)。详情见文档:https://docs.openzeppelin.com/contracts/2.x/tokens#ERC777
如果您对使用 OpenZeppelin 有任何疑问,可以在社区论坛中提问:https://forum.openzeppelin.com/
披露:我是 OpenZeppelin 的社区经理