- 浏览: 761477 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
Beacon
a.Implementation地址并不存放在Proxy合约里,而是存放在Beacon合约里,Proxy合约里存放的是Beacon合约的地址
b.在合约交互的时候,用户同样是和Proxy合约打交道,不过此时因为Proxy合约中并未保存Implementation地址,所以它要先访问Beacon合约获取Implementation地址,然后再通过delegatecall调用Implementation。
c.在合约升级的时候,管理员并不需要和Proxy合约打交道,而只需要交互Beacon合约,把Beacon合约存储的Implementation改掉就行了。
d.就是多个Proxy共享相同的Implementation、需要批量升级的场景。此时,如果想把所有Proxy都升级,那么升级Beacon就天然可以达到升级所有Proxy的效果
MyBeaconProxy.sol
MyUpgradeableBeacon.sol
BeaconImplement.sol
BeaconImplementNew.sol
test
beacon1
impl addr: 0x5FbDB2315678afecb367f032d93F642f64180aa3
new impl addr: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
upgradeableBeacon addr: 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
proxy: 0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9
proxy2: 0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9
通过proxy调用fun():
logic fun
upgrade:
new impl: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
再次通过proxy调用fun():
new logic fun
通过proxy2调用fun():
new logic fun
a.Implementation地址并不存放在Proxy合约里,而是存放在Beacon合约里,Proxy合约里存放的是Beacon合约的地址
b.在合约交互的时候,用户同样是和Proxy合约打交道,不过此时因为Proxy合约中并未保存Implementation地址,所以它要先访问Beacon合约获取Implementation地址,然后再通过delegatecall调用Implementation。
c.在合约升级的时候,管理员并不需要和Proxy合约打交道,而只需要交互Beacon合约,把Beacon合约存储的Implementation改掉就行了。
d.就是多个Proxy共享相同的Implementation、需要批量升级的场景。此时,如果想把所有Proxy都升级,那么升级Beacon就天然可以达到升级所有Proxy的效果
MyBeaconProxy.sol
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; import "hardhat/console.sol"; contract MyBeaconProxy is BeaconProxy { constructor(address _beacon, bytes memory _data) BeaconProxy(_beacon,_data) {} }
MyUpgradeableBeacon.sol
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; import "hardhat/console.sol"; contract MyUpgradeableBeacon is UpgradeableBeacon { constructor(address _impl)UpgradeableBeacon(_impl){} }
BeaconImplement.sol
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "hardhat/console.sol"; contract BeaconImplement { uint public num; address addr; constructor() { num = 1; addr = msg.sender; } function fun() external { num = 2; addr = msg.sender; console.log("logic fun"); } }
BeaconImplementNew.sol
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "hardhat/console.sol"; contract BeaconImplementNew { uint num; address addr; uint num2; constructor() { num = 1; addr = msg.sender; } function fun() external { num = 3; addr = address(this); num2 = 100; console.log("new logic fun"); } }
test
const { ethers } = require("hardhat") contractProxy = "MyBeaconProxy"; contractUpgradeableBeacon = "MyUpgradeableBeacon"; contractImpl = "BeaconImplement"; contractImplNew = "BeaconImplementNew"; describe("beacon1", function () { it("beacon ", async function () { const ContractImpl = await ethers.getContractFactory(contractImpl); const impl = await ContractImpl.deploy(); console.log("impl addr:",impl.address); const ContractImplNew = await ethers.getContractFactory(contractImplNew); const implNew = await ContractImplNew.deploy(); console.log("new impl addr:",implNew.address); const ContractUpgradeableBeacon = await ethers.getContractFactory(contractUpgradeableBeacon); const upgradeableBeacon = await ContractUpgradeableBeacon.deploy(impl.address); console.log("upgradeableBeacon addr:",upgradeableBeacon.address); const ContractProxy = await ethers.getContractFactory(contractProxy); const data = Buffer.from('');//string转bytes const proxy = await ContractProxy.deploy(upgradeableBeacon.address,data); console.log("proxy:",proxy.address); const ContractProxy2 = await ethers.getContractFactory(contractProxy); const proxy2 = await ContractProxy.deploy(upgradeableBeacon.address,data); console.log("proxy2:",proxy2.address); console.log("通过proxy调用fun():"); const funTx = { to: proxy.address, data: ContractImpl.interface.encodeFunctionData('fun()', []) } await ethers.provider.call(funTx) console.log("upgrade:") await upgradeableBeacon.upgradeTo(implNew.address) console.log("new impl:",await upgradeableBeacon.implementation()); console.log("再次通过proxy调用fun():") await ethers.provider.call(funTx) console.log("通过proxy2调用fun():") const funTx2 = { to: proxy2.address, data: ContractImpl.interface.encodeFunctionData('fun()', []) } await ethers.provider.call(funTx2) }); });
beacon1
impl addr: 0x5FbDB2315678afecb367f032d93F642f64180aa3
new impl addr: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
upgradeableBeacon addr: 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
proxy: 0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9
proxy2: 0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9
通过proxy调用fun():
logic fun
upgrade:
new impl: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
再次通过proxy调用fun():
new logic fun
通过proxy2调用fun():
new logic fun
发表评论
-
TypeError:ethers_1.getAddress
2024-04-29 10:45 236package.json 添加:"@nomicfou ... -
solidity
2023-02-25 14:23 12一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 11一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 244一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
Address
2023-02-23 10:54 5// contracts/Box.sol // SPDX ... -
Address
2023-02-23 10:50 207// contracts/Box.sol // SPDX ... -
UUPS
2023-02-17 16:16 252a.Proxy直接把所有的请求都通过delegatecall丢 ... -
Transparent
2023-02-16 15:44 203Transparent: a.如果Proxy合约发现自己被Pr ... -
string转bytes
2023-02-16 11:04 277const data = Buffer.from(''); ... -
hardhat命令
2023-02-13 09:58 3311.前置准备,运行一个新项目 mkdir my-project ... -
multicall
2023-01-31 20:11 199multicall的solidity调用与ethers.js调 ... -
检查是否是721
2023-01-31 15:18 153// SPDX-License-Identifier: M ... -
EVM操作码
2023-01-25 10:33 2902.栈和内存操作码 2.1 POP:取出栈顶元素 2.2 PU ... -
计算合约地址
2023-01-19 11:27 242EVM会根据发送者地址和nonce经过RLP编码后再进行kec ... -
标准修饰符
2023-01-18 17:03 1541.internal:类似c++中的protected,通过J ... -
ABI编码函数
2023-01-17 10:40 3011. abi.encode()returns(bytes):对 ... -
数据位置
2023-01-17 10:24 1751.函数参数包括返回的参数默认是memory 2.局部变量默认 ... -
随机数
2023-01-17 10:06 193https://www.paradigm.xyz/2023/0 ... -
extcodesize
2023-01-16 11:16 282extcodesize取出的byte code长度,若长度大于 ... -
Elevator
2023-01-13 10:48 203Elevator.sol // SPDX-License- ...
相关推荐
一款可以模拟BLE蓝牙的beacon信号的APP。 Beacon Simulator This app transforms your Android device into a virtual BLE beacon advertiser and transmitter. You can create your own collection of beacon ...
在Android平台上,开发一款应用程序来扫描Beacon设备是一项常见的任务,尤其在物联网(IoT)领域。本示例提供了一个具体实现,展示了如何在Android应用中进行Beacon设备的扫描和交互。首先,我们来看看“beacon js-...
2、无线-beacon 3、无线-认证 4、无线-认证全 无线抓包分析: Beacon 包:(无线没设密码) 2、beacon有无线密码 WPA1:WPA中有CCMP(AES)、无TKIP。无RSN 切换为TKIPWPA中有TKIP。无RSN WPA2:...
在Android平台上,Beacon技术是一种基于低功耗蓝牙(Bluetooth Low Energy, BLE)的通信方式,使得设备可以作为信号发射器或接收器进行数据传输。本文将深入探讨如何在Android设备上实现BLE Beacon功能,使其在5.0及...
在Android平台上进行Beacon开发,主要是利用蓝牙低功耗(Bluetooth Low Energy,BLE)技术来实现设备间的通信。"beacon android示例代码"是指一个用于演示如何在Android应用程序中集成Beacon功能的实例。Beacon设备...
在Android平台上,开发基于Beacon的应用程序通常涉及使用第三方库,如`android-beacon-library`。这个库使得开发者能够轻松地检测和与不同类型的Beacons交互,包括iBeacon、AltBeacon和Eddystone等协议。下面我们将...
在Android平台上开发Beacon应用,主要是利用蓝牙低功耗(Bluetooth Low Energy,BLE)技术来检测和通信与Beacon设备。Beacon是一种小型硬件设备,它定期广播特定的标识符,使得附近的移动设备能够接收到这些信号并...
"android-beacon-library-master" 是一个专门为Android平台开发的Beacon相关的开源库,它提供了方便的API和工具,使得开发者可以轻松地在Android应用中集成Beacon技术。Beacon是一种低功耗蓝牙设备,通常用于室内...
"BEACON"是一个与字体相关的主题,但提供的信息相当有限。在IT行业中,字体通常涉及到计算机图形学、用户界面设计、排版技术以及编程语言中的文本渲染。下面,我将详细阐述字体在这些领域中的重要性和应用。 字体是...
《Android Beacon Library:开启BLE信标交互之旅》 在当今的物联网时代,蓝牙低功耗(Bluetooth Low Energy,简称BLE)技术已经广泛应用于各种设备之间的短距离通信,尤其是在移动设备和智能硬件之间。Android ...
本文介绍了基于富士康云平台BEACON的5G+刀具智能生产应用解决方案,该方案旨在利用5G技术的特性,如大带宽、低延迟和高可靠性,提升工业互联网在精密刀具生产中的应用。富士康工业互联网股份有限公司联合其他合作...
Cobalt Strike 使用的 Beacon payload 是一种被高级攻击者广泛使用的后门技术,它能够建立持久的、隐秘的控制通道,执行多种任务,从数据收集到横向移动等。下面详细介绍 Beacon payload 的一些常用命令及其实现。 ...
BEACON产品选型手册是为用户提供了一种深入了解BEACON系列网关的参考资料,尤其对于那些希望在大型PLC(可编程逻辑控制器)系统中寻找不占用机架槽位解决方案的工程师来说,该手册具有重要的参考价值。BEACON系列...
《Beacon Device_ble_DEMO_》是一款基于Delphi开发的蓝牙低功耗(BLE)示例程序,旨在演示如何与Beacon设备进行交互。这款DEMO程序为开发者提供了理解和实践BLE技术的基础,特别关注于Beacon设备的使用。在本文中,...
自己做的OMNIPEEK,以及wireshark版本beacon包解析. 两种抓包工具抓出的结果不太一样,但是可以互相补充。 这个文档可以用来了解802.11 mac层的各个参数。 802.11初学者必备。后续会慢慢丰富此文档。
【Android Beacon Master】是一个基于Android Studio开发的医疗应用项目,主要目标是监控并记录社区居民的健康状况。这个项目利用了先进的技术栈和框架,旨在为用户提供一个方便、高效的健康管理平台。下面将详细...
富士康工业互联网平台BEACON是一个基于开放平台的新型工业生态系统,集成了云计算、物联网、大数据、移动互联网、智慧工厂、互联网、人工智能等新技术或新精矿。 身为全球领先的工业互联网智能制造和科技服务解决...
Cobal_Strike踩坑记录-DNS Beacon1