Solidity0.8.0-部署合约

// SPDX-License-Identifier: GPL-3.0
//通过合约部署合约,通过代理合约去部署,
pragma solidity ^0.8.3; contract TestContract1 { address public owner = msg.sender; function setOwner(address _owner) public {//外部可见方法 require(msg.sender == owner, "not owner"); owner = _owner; } } contract TestContract2 {//合约2包含构造函数 address public owner = msg.sender; uint public value = msg.value; uint public x; uint public y; constructor(uint _x, uint _y) payable { x = _x; y = _y; } } contract Proxy { event Deploy(address);//声明一个事件,通过事件向链外汇报新部署合约地址 function deploy(bytes memory _code) external payable returns (address addr) {//使用部署方法,参数中传入部署合约的机器码,同时可以发送主币的方法和返回新部署合约的新地址
    //合约部署的方法,希望部署其他合约时不用重新部署整个合约,现在功能可以把合约的源码机器码输入进来之后就可以部署合约 assembly {//内联汇编
// create(v,p,n)   // v = amount of ETH to send  //v代表以太坊中发送主币的数量 // p = pointer in memory to start of code //p代表内存中机器码开始的位置 //n = size of code //n 内存中机器码的大小
addr := create(callvalue(), add(_code, 0x20), mload(_code))//0x20 代表跳过这个位置,callvalue()方法代表这次发送的主币,mload()获取大小,addr去获取返回的地址 }
//      returns 写了addr的名字就可以使用隐式返回 require(add
! = address(0), "deploy failed";//确认返回地址部署不是0地址,0地址是部署失败 emit Deploy(addr);//触发事件,加上函数事件名和参数就可以触发 new TestContract1();
   } }

 


__EOF__

本文作者zale
本文链接https://www.cnblogs.com/zaleswift/p/16533236.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ZaleSwfit  阅读(151)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示