如何将 .sol 文件作为参数传递给函数?坚固性
How to pass a .sol file as a parameter to a function? Solidity
在前端创建了自定义 .sol 文件。我需要使用外部用户作为签名者来编译和部署新创建的合约,类似于 remix 让其他人部署自己的合约的方式。
为此,我的计划是创建一个编译和部署新子合约的父合约。这些新建的子合约可以传递给父合约中的函数。这可能吗?如果可以,我该怎么做?
我可以将 .sol 文件作为参数传递给 solidity 合约中的函数吗?
您可以将已编译的字节码(而非 Solidity 源代码)传递给调用 low-level create
操作码的工厂合约,从而有效地部署您刚刚传递给它的合约。
以下是此类工厂合同的示例:
pragma solidity ^0.8;
contract Target {
uint public number = 100;
}
contract Factory {
event DeployedTo(address);
function deploy(bytes memory code) public returns (address addr) {
assembly {
addr := create(0,add(code,0x20), mload(code))
}
emit DeployedTo(addr);
}
function deployTarget() public {
this.deploy(
hex"60806040526064600055348015601457600080fd5b50607d806100236000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80638381f58a14602d575b600080fd5b603560005481565b60405190815260200160405180910390f3fea26469706673582212204222f4063ba77f82b7d8339b117fd0142d917b7d473221d6bb362a1467d5d83864736f6c63430008070033"
);
}
}
这里的Target
仅供参考。 deployTarget()
将其字节码传递给 deploy()
函数,然后您可以通过在部署地址加载 Target
合约(屏幕截图上的蓝色按钮“At Address”)来验证其在 Remix 中的功能).
在前端创建了自定义 .sol 文件。我需要使用外部用户作为签名者来编译和部署新创建的合约,类似于 remix 让其他人部署自己的合约的方式。
为此,我的计划是创建一个编译和部署新子合约的父合约。这些新建的子合约可以传递给父合约中的函数。这可能吗?如果可以,我该怎么做?
我可以将 .sol 文件作为参数传递给 solidity 合约中的函数吗?
您可以将已编译的字节码(而非 Solidity 源代码)传递给调用 low-level create
操作码的工厂合约,从而有效地部署您刚刚传递给它的合约。
以下是此类工厂合同的示例:
pragma solidity ^0.8;
contract Target {
uint public number = 100;
}
contract Factory {
event DeployedTo(address);
function deploy(bytes memory code) public returns (address addr) {
assembly {
addr := create(0,add(code,0x20), mload(code))
}
emit DeployedTo(addr);
}
function deployTarget() public {
this.deploy(
hex"60806040526064600055348015601457600080fd5b50607d806100236000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80638381f58a14602d575b600080fd5b603560005481565b60405190815260200160405180910390f3fea26469706673582212204222f4063ba77f82b7d8339b117fd0142d917b7d473221d6bb362a1467d5d83864736f6c63430008070033"
);
}
}
这里的Target
仅供参考。 deployTarget()
将其字节码传递给 deploy()
函数,然后您可以通过在部署地址加载 Target
合约(屏幕截图上的蓝色按钮“At Address”)来验证其在 Remix 中的功能).