月亮链 月亮链
Ctrl+D收藏月亮链
首页 > SHIB > 正文

REA:靓号地址也可以安全 ?详解无许可多链部署的唯一安全方法_CREA

作者:

时间:1900/1/1 0:00:00

1.6亿美元不翼而飞,而丢失资金的Wintermute是业内最敏锐的做市基金之一,在9月份的一个早上,当Wintermute负责人醒来时,发现他们的一个重要钱包丢失了9位数的资金。那是什么导致了Wintermute被盗?这是由一个靓号地址生成器中糟糕的随机性引起的。黑帽黑客从头开始暴力破解私钥&公开地址对,然后,大量的加密资产就这么被转走了。

还有一个关于IndexedFinance被盗的故事,他们在2021年10月被盗走了1600万美元,然后被盗资金转移到了以0xba5ed…开头的地址。他们不知道的是,这个靓号地址也受到了困扰Wintermute的糟糕随机性漏洞的影响,2022年9月,所有的钱都再次被盗,流向了另一个黑客钱包地址。盗贼是无情的。

那这些天才开发者到底遇到了什么问题,我们能从中学到什么?

左边是用于WETH合约的普通地址。右侧是用于MEV机器人优化的带有14个前导零的靓号地址。最常见的靓号地址类型是带有许多前导零的地址。

首先,什么是靓号地址?靓号地址是指用户刻意创建与其钱包或智能合约相关联的公共地址,也许它以0x0000000开头,也许以0xdeadbeef开头,也许是其他规律的地址。它们受欢迎的原因有几个:

1、Gas优化:Wintermute因为使用了一个有多个前导零的EOA地址而节省了15000美元。听起来很傻吗?很多人都同意,但这就是EVM的工作方式!如果你的地址中有很多零,那么交易gas费用就能下降。所以你如果用一个很多前导零的智能合约地址,当用户在和它交互时,他们会感到很开心,因为这可以为他们省钱。

前SEC主席:现货比特币ETF应该获得批准:金色财经报道,Watcher.Guru发推称,前SEC主席Jay Clayton在采访中称现货比特币ETF应该获得批准。然而,Clayton警告说,这些变化可能不会很快发生,并指出监管过程必须彻底。[2023/7/11 10:46:54]

以太坊黄皮书描述了前导零地址如何可以实现更便宜的gas

2、协议品牌。你知道1inch代币合约是以0x111111111开头……的吗?

1inch代币合约

3、多链重复性。在我看来,这是重中之重,也是为什么每个协议都应该为它们的部署使用一个靓号地址。你的应用可以存在于15条不同的EVM链上,并且在任何地方都具有相同的地址!这对开发者和用户来说不是更容易吗?

那什么时候靓号地址是安全的?

以太坊地址有两种类型:外部拥有账户和智能合约账户。如果你使用过像MetaMask这样的钱包,其中的每个地址都是一个EOA,它是用来签署消息和进行交易处理的。将此与Uniswap合约等智能合约账户进行比较,人们可以与之交互,但它不能在不被触发的情况下采取自己的行动。总结一下,很简单,靓号地址对EOA账户来说是不安全的,但对于智能合约账户是安全的。

那为什么会是这样?我们将在下面进行更详细的解释,但这取决于靓号地址是如何生成的。对于EOA账户,你循环使用数百万个私钥,直到找到一个与美观的公共地址相对应的私钥。然而,私钥控制着EOA账户内的资金,因此,如果你用来遍历私钥的随机性遭到破坏,那么你的整个账户就会被毁了。另一方面,创建智能合约靓号地址只需要遍历公共种子,这些种子不授予智能合约的任何管理权限。

数据:BTC 活跃度达到 2 年低点:金色财经报道,Glassnode数据显示,BTC 活跃度刚刚达到 2 年低点,数值为0.604。[2023/2/27 12:30:50]

这就是为什么Wintermute会失败,而OpenSea却成功的原因——用不安全的软件在不安全的内存中生成私钥是不好的。但是以这种方式生成公共种子却非常好!所以EOA靓号地址是一条破产之路,而智能合约靓号地址是一条成功之路。

为什么协议需要靓号地址

更简单的文档!你可以在所有链上指向一个合约地址;用户可验证!只有当且仅当字节码是逐字节匹配时,才会出现相同的合约地址;开发者可验证!由于相同的合约地址只发生在完全匹配的情况下,因此你可以在部署脚本中捕捉到棘手的小修改;更简单的集成!其他协议可以将你的合约地址硬编码到它们的多链代码中,而不必使用基于chainId的if语句;注:我们即将深入研究一份详细说明手册。这是第一次把所有的部分放在一起,我们正在深入技术领域,目标受众是具有在链上部署智能合约经验的智能合约开发人员。如果你感兴趣,请继续阅读,但如果不适合你,请不要担心跟不上!最后还有一个额外的技术挑战(有奖励)。

智能合约靓号地址

有一种方法可以生成100%安全的智能合约靓号地址,无论你使用哪种软件,迭代技术是否公开泄露都无关紧要。它被称为“CREATE2工厂法”,这不仅提供了靓号地址,而且还是确保你在多条链上拥有相同合约部署地址的万无一失的方法。它还允许其他人无需信任地代表你部署代码,而无需任何私钥共享或nonce假设。

首先,快速概述一下如何选择智能合约地址。有两个部署选项,分别是?CREATE?和?CREATE2?。当你直接从EOA部署智能合约时,默认流程是CREATE。该地址是通过将合约创建者地址与合约创建者nonce进行哈希运算来确定的。这个nonce是指一个地址发送了多少笔交易,所以一个新的钱包是从0开始,每次发送一笔新交易都会增加1。以下是CREATE部署的智能合约地址的神奇公式:

new_address=hash(sender,nonce)

GameStop钱包增加对Immutable X的原生支持:8月9日消息,GameStop钱包发布新版本,增加对Immutable X的原生支持。7月份,GameStop钱包开始支持Immutable X的市场可以通过GameStop钱包进行交易,但此前无法直接在钱包内进行交互。[2022/8/9 12:12:37]

不太常见,但更有趣的,是使用CREATE2部署的智能合约地址,以下是其公式:

new_address=hash(0xFF,sender,salt,bytecode)

前者看起来更简单,对吧?但是,让我们举一个例子,说明与更健壮的CREATE2流程相比,这种简单性在哪些方面会产生不利影响。

AiryAlice:多链出了问题

想象一个名叫Alice的crypto开发者创建了两个智能合约:一个名为GriddleSwap的Uniswap分叉,以及一个名为ph00ts的NFT项目。它们都是不可变的独立原语,这意味着没有外部依赖或跨链桥风险。Alice使用nonce0将GriddleSwap部署到以太坊,然后使用nonce1将ph00ts部署到以太坊。遗憾的是,Alice的注意力持续时间很短,在将她的工作部署到第二大智能合约平台币安智能链之前,她在加密推特上分心了几分钟。

糟糕,搞砸了部署顺序!

但是等等!她搞砸了部署顺序,在GriddleSwap之前部署了ph00ts。由于智能合约地址仅依赖于创建者地址,并且在部署区块链中,以太坊gridleswap与BSCph00ts具有完全相同的地址!雪上加霜的是,以太坊ph00ts的地址与BSCGriddleSwap的地址相同。认为终端用户会感到困惑是一种保守的说法。事实上,它可能被恶意部署者滥用,以人们认为在链上的合约行为是相同的——这是一个公平的假设,给定相同的地址!

Jump总裁:Jump Crypto没有陷入流动性危机,将继续招聘和投资:6月18日消息,Jump总裁Kanav Kariya在接受采访时表示,Jump Crypto没有陷入流动性危机,且正在继续招聘,并没有裁员计划。目前Jump Crypto 拥有大约150名员工。Kariya表示:“未来几年,我们将继续在加密领域大举投资。”他说,他和他的团队没有被吓倒。“总的来说,我感觉积极多了。如果我们失去信念,就会逐渐停滞。”

Jump Crypto此前也曾卷入Terra崩盘危机之中,因为该公司自2019年以来一直支持Terra。今年2月,LFG宣布完成10亿美元融资,本轮融资通过场外销售LUNA代币完成,由Jump Crypto和三箭资本领投,Republic Capital、GSR、Tribe Capital、DeFiance Capital等参投。(彭博社)[2022/6/18 4:37:23]

细心的Alice:仍然会有问题

即使Alice在部署时很认真,并且从不混淆她的nonce顺序,还有其他的问题。如果Alice正确部署到以太坊和BSC上,但随后在Polygon上进行了一笔不相关的交易,则nonce0已被用完。她永远不能在那里部署GriddleSwap,因为她的nonce已经增加了。因此,必须不惜一切代价保护部署者私钥。如果Alice泄露了它,恶意破坏者就可以进行不相关的交易。如果Alice丢失了它,她也将失去在新链上再次部署到该地址的能力。这是一个永久性的漏洞,依赖于一个诚实的个人来保护私钥。?如果连比特币core开发者做不到,那我们其他人又该如何做到呢?

解决方案:CREATE2

值得庆幸的是,有一种更好的方法可以跨链获得一致的地址——不依赖于秘密私钥,不依赖于单个部署者,并且在整个过程中可以抵抗部署者的错误。请记住用于查找使用CREATE2部署的智能合约地址的公式:

new_address=hash(0xFF,sender,salt,bytecode)

第一个参数?0xFF?是一个可以忽略的常数值。第二个参数(senderaddress)可以通过在大多数EVM链中选择z0age的CREATE2Factory部署0x0000000000FFe8B47B3e2130213B802212439497来保持一致。第三个参数是一个用户选择的?salt,我们可以用它来找到一个靓号地址,然后在链上保持不变。第四个是合约字节码,它可以作为一个有用的完整性检查,以确保我们在链上部署完全相同的功能。无论任何单个部署者做什么,所有四个参数都可以保持相同。

腾讯区块链联合灵动创想推出“雄师奇兵”数字藏品:金色财经消息,腾讯区块链携手中国人民革命军事博物馆及文创品牌“灵动创想”,联合打造了“雄师奇兵”变形机器人系列产品,通过实体+数字文创产品的形式让大众认识和了解军事文化,引领军事博物数字藏品的新潮流。[2022/6/8 4:09:59]

为什么这样更好呢?与私钥不同,部署者选择的salt是可以被公开的!知道salt可以部署合约,但对合约资产或功能的控制为零。因为它不绑定任何秘密信息,所以任何人都可以在不泄露或共享私钥的情况下将合约部署到新链上。字节码参数还确保当且仅当字节码*相同*时,这些新的无许可部署将具有相同的地址。因此,最终用户无需做详细的代码差异就能得到更强的保证。

有关更深入的概述,请参阅?OpenZeppelin的科普文章?。

创建你自己的靓号地址

认为以太坊合并后,工作量证明就没用了吗?再想一想!同样的GPU功能,有助于为比特币区块寻找具有大量前导零的哈希原像,在为EVM智能合约找到具有大量前导零的哈希原像方面也非常出色。来自OpenSea的z0age找到了一个简单的设置来创建你自己的靓号地址。

1、使用?vast.ai?启动一个GPU示例实例,每秒尝试约20亿次,成本约为25美分/小时:

Image:nvidia/openclGPU:1xRTX3090需要分配的磁盘空间:1.83GB2、SSH并安装rust+create2crunch

sudoaptinstallbuild-essential-y;curl--proto'=https'--tlsv1.2-sSfhttps://sh.rustup.rs|sh-s---y;source"$HOME/.cargo/env";gitclonehttps://github.com/0age/create2crunch&&cdcreate2crunch;sed-i's/0x4/0x40/g'src/lib.rs

3、运行种子搜索。对于环境变量,INIT_CODE_HASH是合约创建代码的keccak256。可以在此处?找到一个打印出来的样本代工测试-确保在消耗大量计算资源之前对其进行验证!LEADING应该是你想要的前导零字节数,TOTAL应该是你想要在合约地址中的总零字节数。

exportFACTORY="0x0000000000ffe8b47b3e2130213b802212439497";exportCALLER="0x0000000000000000000000000000000000000000";exportINIT_CODE_HASH="0xabc...def";exportLEADING=5;exportTOTAL=7;cargorun--release$FACTORY$CALLER$INIT_CODE_HASH0$LEADING$TOTAL

当z0age首次发布他的repo时,它能够在上述vastAI硬件上每秒运行19亿次尝试。从那时起,矢量化在某些OpenGL内核上变得疯狂起来,我观察到每秒有21.5亿次尝试。这意味着找到一个5前导零字节地址需要256^5/(2150000000*60)~=8分钟,找到一个6前导零字节地址需要256^6/(2150000000*3600)~=36小时,找到一个7前导零字节地址需要256^7/(2150000000*86400)~=387天。请注意,一个字节等于两个十六进制字符,因此一个5前导字节的地址将有10个零。当然,这种搜索可以完全并行化,随着时间的推移,实际成功的概率将遵循泊松分布。

部署CREATE2工厂

精明的读者可能已经注意到,CREATE2Factory在所有链上都已经存在于0x0000000000FFe8B47B3e2130213B802212439497。这有点像鸡生蛋还是蛋生鸡的问题,一致的地址部署如何依赖于一致的地址部署?

当我最初了解到这种方法时,我以为它只是一个由比我更聪明的人持有的私钥(上面的“细心的Alice”场景)。但它实际上比这健壮得多!ENS创始人NickJohnson的“无密钥交易”方法利用了这样一个事实,即你可以从任何交易签名中恢复公共地址,而无需知道签署它的相应私钥。因此,可以创建一笔交易,然后为其发明一个伪造的签名,例如仅由2组成的签名。存在这个伪造签名的私钥,但没有人知道它是什么。但是我们可以恢复“无密钥签名”对应的公共地址,给它发送一些ETH,然后将签名的交易提交给内存池。尽管这种方法很模糊,但它是一笔有效的交易,而且实际上是唯一可以从这个公共地址发出的有效交易。

结果呢?任何人都可以在没有任何专有信息的情况下将factory部署到新的链上,同时防止恶意行为者造成损害。创建一个只能部署一个事务的单用途EOA是非常巧妙的技术。

无密钥交易过程中创建的具体地址和合约

这可以通过三个简单的“forgecast”命令来完成。字节码太长,无法在此处复制,但你可以按照?https://github.com/ProjectOpenSea/seaport/blob/main/docs/Deployment.md?上的说明,在你选择的任何链上无需许可地部署CREATE2Factory!

当然,如果已经部署过了,就没有必要再部署了。

旁注:EIP-155要求是糟糕的

简短的尝试来支持我的L1治理冒险行为,请随意跳过。EIP-155?是Vitalik于2016年提出的一项提案,其引入了“链ID”的概念以防止重放攻击。每条链都有自己的唯一标识符——以太坊是1,BSC是56,Polygon是137——这些标识符将包含在已签名的交易中以防止重放攻击,它很快被以太坊采用,而其他所有EVM链都跟着采用了这个提案。这很好,但问题来了,当选择几条链,例如Evmos最近决定明确禁止EIP-155前的交易?,在奇怪的理由下,它可以防止一个操作错误,即Optimism将2000万OP代币发送到Wintermute不存在的一个多重签名地址,声称拥有但从未初始化。但是,禁用155之前的交易会显著破坏一整套跨链部署,例如CREATE2factory以及Seaport等领先项目。这些治理提案应该立即回滚,像这样的保护细节应该来自钱包而不是共识层。如果多链是未来,那么这些不必要的限制,将是顶级项目部署在你的区块链上的巨大障碍。

有趣的东西:部署赏金

今天https://delegate.cash部署在7个不同的EVM链以及与这些链对应的7个测试网上。所有这些的合约地址都是相同的:0x00000000000076A84feF008CDAbe6409d2FE638B。

那这就够了吗?不,我们需要更多的链。因为delegatecash是一个零依赖的独立原语,这意味着多链的风险实际上为零。这是纯粹的好处!因此,对于前5名将delegatecash智能合约部署并验证到新链和相应的测试网上的人,我将奖励100USDC奖金!

你需要在此处?使用开源存储库中的部署脚本。这可能需要部署CREATE2Factory,并且不要忘记Etherscan验证!愉快部署,享受体验式学习!

标签:REAEATCREACREDreamr Platform Tokeneat币什么币cream币最新消息Yucreat

SHIB热门资讯
NFT:「POWER峰会速递」G-Rocket加速器行政总裁:香港优势,落地HK Web3 Hub_web3币价格

1月10日,由MarsBit主办,香港创新产业园区数码港、G-Rocket高诺国际加速器、element协办的「POW’ER香港Web3创新者峰会」在港举办.

1900/1/1 0:00:00
EFI:DeFi是前进的方向,但它需要进化_Scarcity DeFi

DeFi的技术基础已被证明对过去几个月的灾难性市场事件具有令人难以置信的弹性。在DeFi轨道上构建新一代金融服务的机会从未如此之大,但这个行业需要解决一些显著的挑战.

1900/1/1 0:00:00
TRADE:2022年揭露了关于加密货币的4个基本事实_ADE

注:本文来自@elliotrades推特,MarsBit整理如下:2022年揭露了关于加密货币的4个基本事实:?美联储控制市场?隐藏的杠杆是有的?去中心化为王?固定收益率是一个局我将在下面分.

1900/1/1 0:00:00
GAS:Buidler DAO:EIP-4337账户抽象钱包方案能否开辟钱包新时代?_TOGASHI币

钱包作为进入加密世界的入口以及通行证在整个加密行业中有着不可替代的地位,使用钱包也是每一个想进入加密世界的人不可避免的一环,钱包的功能也从最初的纯记账功能演化至如今的多链多场景使用功能.

1900/1/1 0:00:00
FTX:盘点2022年的“巨亏王”:17位加密大亨资产缩水约1160亿美元_PLE

2022年的加密寒冬之下,除了万亿市值被蒸发外,不少加密企业和创始人也面临了前所未有的亏损,甚至陷入破产清算的窘境.

1900/1/1 0:00:00
区块链:速读慢雾 2022 区块链安全及反年度报告_bnb挖矿教程

慢雾科技发布《2022区块链安全与反分析年度回顾》报告,聚焦于2022年区块链行业所发生的重大事件,介绍区块链行业各赛道的安全状况,延伸并提炼出常见攻击手法,并披露其中几种钓鱼手法.

1900/1/1 0:00:00