如何将 .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 中的功能).