皇冠比分
皇冠比分
  • 首页
  • 皇冠网站
  • 皇冠直播
  • 皇冠官方
  • 皇冠现金盘
  • 皇冠投注网
  • 皇冠管理端
  • 皇冠导航网
  • 皇冠新网址
  • 皇冠体育官网
  • 首页
  • 皇冠网站
  • 皇冠直播
  • 皇冠官方
  • 皇冠现金盘
  • 皇冠投注网
  • 皇冠管理端
  • 皇冠导航网
  • 皇冠新网址
  • 皇冠体育官网

栏目分类

  • 皇冠网站
  • 皇冠直播
  • 皇冠官方
  • 皇冠现金盘
  • 皇冠投注网
  • 皇冠管理端
  • 皇冠导航网
  • 皇冠新网址
  • 皇冠体育官网

热点资讯

  • 皇冠线上体育官方平台怎么样亚博体育 黑平台 | Wisps:
  • 2025年通博彩票极速赛车欧洲杯官方赛程(www.sugza
  • 新2代理开户武汉欧洲杯看球地点 | 农业银行粤港澳大湾区跨境
  • 网络现金山东体育彩票11选5 | 翌日,进博会怎么让中国与世
  • 亚游博彩英国足球博彩公司_念念过有今天吗?半年前九牛曾威逼退

皇冠管理端

你的位置:皇冠比分 > 皇冠管理端 >
皇冠线上体育官方平台怎么样亚博体育 黑平台 | Wisps:Create2的奇妙寰宇 | BTC
发布日期:2026-05-18 20:34    点击次数:189
皇冠线上体育官方平台怎么样亚博体育 黑平台

- 磷火—— Herrmann Hendrich(1884) -

在 ETHCapeTown 黑客马拉松时间,咱们使勤恳能宽广的,新的以太坊操作码——CREATE2,制作了一个合约钱包的快速见地讲授。

皇冠客服飞机:@seo3687

较之 CREATE 操作码,CTEATE2 操作码不错在使用以太坊合约来生成新合约时更好地限制新合约的地址,当你念念要反事实地(counter-factually)部署并使用一个自界说权限的合约时,这曲直常灵验的。

Wisp 合约的探讨是演示一种生成厚实合约钱包地址的时间,该地址可与其他用户分享,也不错结束代币和以太币转账功能,同期还不错在不保留任何链上合约钱包代码的情况下限制链上钞票(举例 ENS 域名)。

传言称,某一场博彩赛事中,皇冠赔率实际结果出现巨大偏差。消息立刻引起业内人士关注调查,皇冠方面则一直对此作出任何回应。皇冠信用正网

Wisp 地址的优点包括:领先,总共发给这种 Wisp 地址的往复都只需要笃定的 21, 000 gas,然而更进犯的是,这意味着不错造访代币、资金以过头他链上钞票的合约钱包不成被挫折,因为它的代码实质上不在链上。

www.kingjackpotpro.com

淌若合约钱包中出现失实,可于再次使用前在客户端进行更新,此时间总共加密钞票都是安全的。

皇冠体育hg86a

剧透以及太长不看版: 使用静态指挥行径 initcode 不错 获取 CREATE2 runtime 合约字节码从而生成可复用的合约地址。

  initcode 是什么?  

在真切了解这种时间之前,先鼎沸会以太坊合约的部署经过。

合约的部署经过使用了一段被叫作念 initcode 的代码,它仅仅一个普通的以太坊行径,平时履行将复返部署合约实质所用的合约字节码。固然有点抽象,然而它不错因循功能畸形宽广的部署系统。

你不错念念象一下,JavaScript 中 “Hello Word” 的 initcode 可能便是这么:

function initcode() {
    return "console.log(\"Hello World\")";
}
这个行径运行时将复返一个 “Hello World” 行径。这么作念不错结束非常的部署时建树,举例:
function init(language) {
    if (language == "en_pl") {
        return "console.log(\"Ellohay orldway\")";
    }
    return "console.log(\"Hello World\")";
}
需要明慧的畸形进犯的小数是: 被部署的不是 initcode,而是 initcode 的运行效果。

  CREATE vs CREATE2  

尽管大多数以太坊诞生者都使用了 CREATE 操作码(来部署链上合约),然而他们可能并莫得果断到这件事。Solidity 所生成的字节码实质上是 initcode,它使用 CREATE 来履行构造函数中的对应操作,随后复返合约除构造函数外的其他部分。实质部署上链的代码不包含构造函数代码。

为笃定部署上链的合约地址,CREATE 使用的圭臬参数包括: 发送账户(它自身可能亦然一个合约) 发送账户确当赶赴来序号(也不错是一个合约刻下的 nonce) 因此,恣意两个不同的发送者将生成不同的合约地址,而来自消释个账户的恣意两笔不同往复也将生成不同的合约地址。

为笃定部署上链的合约地址,新的 CREATE2 使用: 发送账户(通常,它自身可能亦然一个合约) 合约 initcode(履行产生合约字节码) 由诞生东说念主员设定的自界说数(salt) 因此,CREATE2 与 CREATE 一样,不同的发送者将生成不同的合约地址。而 initcode 相通\然而自界说数不同期将生成不同的合约地址;而 initcode 不同期(频繁意味着不同合约),也将生成不同的合约地址。

CREATE2 的另一个值得明慧的(灵验的)是,由于其对缱绻合约地址的参数多了小数限制,淌若一个合约自毁了,那么新合约改日不错再次部署到这个地址上。然而,淌若也曾有非自毁合约部署到这个地址上了,那么 CREATE2 不成在这个地址上再次部署一个合约。

  抽象一下  

由于限制发送者以及自界说数很容易,因此结束 Wisp 合约探讨独一要作念的事情便是绕过 CREATE2 的第二个参数;最终允许两个不同的合约在不同的时刻被部署在消释个地址上。

然而,initcode 仅仅一个用于笃定所部署合约的行径。这一特质不错用千般趣味的行径加以愚弄。

每个 Wisp 合约的进口都是一个启用和措置总共 CREATE2 调用的跳板合约(Springboard Contract),因此跳板合约将一直是发送者。至于 salt,因为使用 msg.sender 的哈希值手脚自界说数,因此消释个账户的恣意两个调用将永远指向消释个 Wisp 合约。

皇冠线上体育官方平台怎么样

剩下的是一个普通的(静态)指挥行径 initcode。initcode 要在新合约中运行,然而此时新合约还未创建;这意味着 msg.sender 实质上是跳板合约。因此,跳板书籍会将所需的合约字节码保存在我方的存储空间中,并提供一个名为 getPendingBytecode() 的群众行径,指挥行径的(伪)代码不错简便地示意成如下花式:

function init() {
    contractBytecode = msg.sender.getPendingBytecode()
    return(contractBytecode);
}
由于指挥行径 initcode 老是相通的,因此唯有合约是强制履行的自毁合约(然而不在本篇著述的商讨领域内),跳板合约就不错限制 CREATE2 从而生成鼓胀一致的合约地址。

也便是说,大体上,咱们针对源码删除了一些小细节,同期又添加了一些非常的内容,总之,该时间运行邃密,感意思意思的诞生者也曾不错使用了!

亚博体育 黑平台

  Wisp 合约生计周期  

这是一个用于匡助施展 WIsp 合约生计周期的简便图表及摘录: 一笔往复的主视力址是跳板合约(请明慧,合约也不错调用跳板合约,在这种情况下,该合约地址将领有 Wisp 合约) CREATE2 被用于启动化 Wisp合约 在启动化时间,Wisp 合约回调跳板合约以获取所需的 runtime 字节码,该字节码随后由 initcode 复返。 Wisp 合约的 execute() 行径被调用时,运行总共所需的操作 Wisp 合约的 die() 行径被调用时,糟跶该 Wisp 合约,因此改日可在该地址从头创建合约。 明慧:总共 ETH 都将返还给 Wisp 合约总共者,因为 ETH 在研究会自毁的合约中是不安全的。

美高梅进8844vip送18

  跳板合约代码(Solidity)  

一个简便的例子:这是被部署到 Ropsten上的,在黑客马拉松时间使用的代码。就像大多黑客马拉松的代码那样,它有点约略,因此不要将其用于实质应用。

该版块同期支执外部总共账户(EOA)和 ENS 域名。淌若调用 ENS 域名版块,则 ENS 域名总共者限制 Wisp 合约,该版块允许通过修改 ENS 领略的地址来升沉 Wisp 总共者(以及它限制的总共钞票)。

pragma solidity ^0.5.5;
interface ENS {
  function resolver(bytes32) external view returns (address);
}
interface Resolver {
  function addr(bytes32) external view returns (address);
}
interface Wisp {
  function execute() external;
  function die(address owner) external;
}
contract Springboard {
  ENS _ens;
  bool _mutex;
  bytes _bootstrap;
  bytes _pendingRuntimeCode;
  constructor(address ens, bytes memory bootstrap) public {
    _ens = ENS(ens);
    _bootstrap = bootstrap;
  }
  function getBootstrap() public view returns (bytes memory) {
    return bootstrap;
  }
  function _execute(bytes runtimeCode, bytes32 salt) internal {
    // Prevent re-entry
    //防备重入
    require(!_mutex);
    _mutex = true;
    // Store the desired runtime bytecode
    //存储所需 runtime 字节码
    _pendingRuntimeCode = runtimeCode;
    bytes memory bootstrap = _bootstrap;
    address wisp;
    uint256 status;
    // Create the Wisp
    //创建 Wisp
    assembly {
      wisp := create2(callvalue, add(bootstrap, 0x20),
                      mload(bootstrap), salt)
    }
    // Run the Wisp runtime bytecode
    //运行 Wisp runtime 字节码
    Wisp(wisp).execute();
    // Remove the Wisp, so it can be re-created in the
    // future, with different runtime bytecode
    // 移除 Wisp,因此改日可使用不同的runtime bytecode 从头创建合约
    Wisp(wisp).die(msg.sender);
    _mutex = false;
  }
  // Calling this will create the Wisp on-chain, execute the
  // runtime code and then remove the Wisp from the blockchain.
  //调用该函数将在链上创建 Wisp,履行 runtime代码,并随后在链上移除 Wisp
  function execute(bytes memory runtimeCode) public payable {
    _execute(runtimeCode, keccak256(abi.encodePacked(msg.sender)));
  }
  // This method is the same as execute, except it uses ENS names
  // to manage a Wisp. This allows a simple form of ownership
  // management. To change the owner of a Wisp, simply update the
  // address that the ENS name resolves to, and all the Wisp's
  // assets will be able to be managed by that new address instead.
  //该行径与 execute 一样,除了它使用的是 ENS 域名来措置 Wisp。该行径允许简便
  //的总共权措置。为了改造 Wisp 的总共权,只需要简便的更新 ENS 域名领略的地址,
  //就不错结束 Wisp 合约的总共钞票由新地址措置

function executeNamed(bytes32 nodehash, bytes memory runtimeCode) public payable { // Verify the ENS nodehash is owned by msg.sender //考据 ENS nodehash(节点哈希)由 msg.sender 总共 Resolver resolver = Resolver(_ens.resolver(nodehash)); address owner = resolver.addr(nodehash); require(owner == msg.sender); // Execute based on the nodehash //基于 nodehash(节点哈希)履行 _execute(runtimeCode, nodehash); } // This function is called by the Wisp during its initcode // from the bootstrap, fetching the desired bytecode //Wisp在 initcode 时间从指挥行径处调用该函数,赢得所需的字节码 function getPendingRuntimeCode() public view returns (bytes memory runtimeCode) { return _pendingRuntimeCode; } }

在黑客马拉松时间使用的指挥行径畸形简便,而且是手写代码,因此不错使用部署剧本中的几行 JavaScript 代码泛泛拼装。然而由于该代码放心性不够好,需要搜检复返状况。
; mstore(0x00, 0x94198df1) (sighash("getPendingRuntimeCode()"))
0x63 0x94198df1
0x60 0x00
0x52
; push 0x03ff (resultLength)
0x61 0x03ff
; push 0x20 (resultOffset)
0x60 0x20
; push 0x04 (argsLength; 4 bytes for the sighash)
0x60 0x04
; push 0x1c (argsOffset; where the 4 byte sighash begins)
0x60 0x1c
; caller (address)
0x33
; gas
0x5a
; staticcall(gas, caller, args, argsLen, result, resultLen)
0xfa
; mload(0x40) (bytecode bytes length)
0x60 0x40
0x51
; push 0x60 (0x20 + 0x20 + 0x20) (bytecode bytes offset);
0x60 0x60
; return (bytecodeOffset, bytecodeLength)
0xf3
;; // Assemble in JavaScript:
;; // 在 JavaScript 中拼装:
;; function assemble(ASM) {
;;   let opcodes = [];
;;   ASM.split("\n").filter((l) =>
;;     (l.substring(0, 1) !== ";" && l.trim() !== "")
;;   ).forEach((line) => {
;;       line.split(" ").forEach((opcode) => {
;;         opcodes.push(opcode);
;;       });
;;   });
;;   return ethers.utils.hexlify(ethers.utils.concat(opcodes));
;; }

电竞菠菜平台的搭建
WIsp 示例  

GitHub repo 中有几个 Wisp 合约的例子,然而基本上总共的操作都不错放在 execute() 函数中。

出于黑客马拉松的主见,任何转发给 Wisp 的余额在 CREATE2 部分都手脚捐赠提供,因此使用 this.balance 而不是 msg.value。正如上头的插图展示的那样,不错转发给至 execute() 函数 。底下是一些可在 Wisp 合约中完成的责任的例子:

interface WETH {
  function deposit() external payable;
  function transfer(address, uint) external returns (bool);
  function balanceOf(address) external returns (uint);
  function withdraw(uint) external;
}
contract Wisp {
  function execute() {
    // Call WETH to convert between ether and WETH
    // 调用 WETH 从而调节以太和 WETH
    WETH weth = WETH(0xe7a70dD69D8D2e2f0e775FfAC0C440f23D2ABb72);
    WETH(wethContract).deposit(0.1 ether);
    weth.withdraw(weth.balanceOf(address(this)) / 2);
    // Transfer ether
    //升沉以太
    (0x30bc5920A76B483080523482D7FC2B64c9D5bd80).transfer(1 ether);
  }
  function die(address addr) {
    selfdestruct(addr);
  }
}

据网传信息显示,周雅萍在事发时正进行滑雪跟拍活动,然而,在雪道的交叉路口,为了避让拍摄雪友,她失去了控制,滑至雪道外受伤。尽管经过富蕴县人民医院的抢救,最终还是未能挽救她的生命。

论断  

CREATE2 操作码畸形棒而且功能千般。现在咱们仍在进行关系探索,咱们尝试着在咱们的多签名合约钱包中使用它创建钞票商店。

咱们的探讨是创造一个可靠而且机动的钞票商店,其不错存储大量的 CryptoKitties,ENS 域名以及千般代币,同期不错泛泛结束钞票在多签名实例之间的升沉。由于 Wisp 合约不错针对其限制的钞票履行恣意操作,因此它以致不错使用钞票被造访之时还不存在的功能。

不错说它基本上便是一个花哨的交付调用(Delegate Call)。

感谢阅读!感谢您对咱们的责任提供反应或者忽视,淌若你念念随着继续跟进我的闲谈和模样,存眷我的 Twitter 和 GitHub。

足球竟彩博彩公司信誉皇冠平台

请明慧:大多数读者都不需要使用这个版块,淌若对咱们正在议论的更高档的版块感意思意思,请看下文!

(下文提供了下一代的跳板合约代码,此处不详)

 

原文连续: https://blog.ricmoo.com/wisps-the-magical-world-of-create2-5c2177027604 作家: RicMoo 翻译&校对: Aisling & 阿剑

本文使用 CC-BY-4 解放创作许可发布中国注册足球运动员数量,任何东说念主都可在保留作家签字的前提下解放使用本文。



上一篇:2025年通博彩票极速赛车欧洲杯官方赛程(www.sugza.com)
下一篇:没有了
相关资讯
  • 2026/05/18皇冠线上体育官方平台怎么样亚博体育 黑平台 | Wisps:Create2的奇妙寰宇 | BTC
  • 2026/05/182025年通博彩票极速赛车欧洲杯官方赛程(www.sugza.com)
  • 2026/05/17新2代理开户武汉欧洲杯看球地点 | 农业银行粤港澳大湾区跨境投行中心(广东)在广州揭牌竖立
  • 2026/05/17网络现金山东体育彩票11选5 | 翌日,进博会怎么让中国与世界更好地“双向奔赴”?
  • 2026/05/15亚游博彩英国足球博彩公司_念念过有今天吗?半年前九牛曾威逼退出联赛,如今提前夺冠
    友情链接:

Powered by 皇冠比分 @2013-2022 RSS地图 HTML地图

皇冠体育导航皇冠体育皇冠现金网皇冠客服新2网址