1.metamask使ç¨åªä¸ªä»¥å¤ªåèç¹
2.Foundry的太坊基本使用总结
3.以太åç ChainId ä¸ NetworkId
4.死磕以太坊源码分析之Kademlia算法
5.Hyperledger Fabric如何通过虚拟机部署以太坊智能合约
metamask使ç¨åªä¸ªä»¥å¤ªåèç¹
metamask使ç¨rpcurl以太åèç¹ãæ ¹æ®æ¥è¯¢ç¸å ³çå ¬å¼ä¿¡æ¯ï¼å½ç¨æ·è¿æ¥å°èªå®ä¹MetaMaskç½ç»æ¶ï¼MetaMaskå°ä¸RPCURLä¸ç以太åèç¹éä¿¡ï¼å¹¶ä½¿ç¨å®åé交æãä»åºåé¾è¯»åæ°æ®ä»¥åä¸æºè½å约交äºã
Foundry的基本使用总结
本文列举了 foundry 中常用的命令,方便后续查阅。服坊使用 foundry 的码太工具主要涉及三大组件,分别对应不同的太坊功能,接下来将详细介绍每个组件的服坊使用方法和应用场景。
在使用 foundry 之前,码太劲舞作图源码需要先安装。太坊可以通过访问 foundry 的服坊官方网址 getfoundry.sh 进行安装。对于 mac 系统用户,码太可以使用以下命令进行安装:
foundry
foundry 工具包含三大组件,太坊分别是服坊 cast、anvil 和 forge。码太
**cast 使用
**cast 是太坊用于执行以太坊 RPC 调用的命令行工具。它支持智能合约调用、服坊发送交易和检索链数据等操作。码太cast 与 web3 的交互十分便捷,即使是非代码开发者也能轻松使用进行链上数据查询。
使用示例:
cast rpc eth_blockNumber --rpc-url=$ETH_RPC_URL
cast 支持环境变量 ETH_RPC_URL,读取时无需在命令中体现,只需设置该变量即可。
**cast 查询功能
**- **区块高度**:使用 `cast rpc eth_blockNumber` 查询。源码安装odbc
- **区块信息**:使用 `cast block` 查询。
- **交易信息**:使用 `cast tx` 查询。
- **交易回执查询**:使用 `cast receipt` 查询。
**使用 jq 进行数据处理
**`jq` 是一个灵活的轻量级命令行 JSON 处理器,用于处理 JSON 输入并生成 JSON 输出。可应用于处理 cast 查询结果。
**交易模拟
**`cast run` 命令可用于模拟交易,以进行测试或研究特定交易场景。
**钱包相关功能
**`cast wallet new` 可创建新钱包,通过 `cast wallet sign` 进行签名操作。此外,`cast resolve-name` 和 `cast lookup-address` 功能用于 ENS 查询。
**合约相关功能
**在使用查看源代码功能前,需设置 `ETHERSCAN_API_KEY` 环境变量。`cast etherscan-source` 可用于查看合约源代码,通过 `-d` 参数保存结果。调用合约函数则使用 `cast call`。
查询合约存储位置的 `cast index` 命令可根据类型、键和槽位编号计算存储位置。
**anvil 使用
**`anvil` 提供了模拟从主网 fork 的护理信息 源码功能,通过 `casat —fork-url=$ETH_RPC_URL` 实现。常用命令参数包括 `—accounts`、`—balance` 和 `—fork-block-number`。
**forge-智能合约开发框架
**`forge init` 命令初始化项目,`forge build` 编译代码,`forge test` 进行自动化测试。日志打印可通过 `emit log` 或 `console2.log` 实现,确保在使用 `forge test` 时使用 `—vvv` 参数以显示打印内容。
`cheatcode` 功能允许在测试合约中通过 `vm` 修改虚拟机状态,如 `vm.warp` 修改时间戳、`vm.startPrank` 和 `vm.stopPrank` 修改发件人、`vm.deal` 修改余额等。
`forge snapshot` 功能允许在每个测试用例的 gas 使用上创建快照,有助于优化 gas 费用。
**代码示例
**### 修改 ERC 代币余额
在进行 ERC 代币余额修改时,可以使用 `vm.deal` 函数。如果在测试环境中未部署 ERC 合约,可通过 fork-url 直接使用主网的 ERC 合约。
### fork-url 在代码中的实现
在代码中实现 fork-url 可以通过 `vm.envAddress` 函数读取 vm 中的环境变量地址,进而实现针对不同测试网络的源码什么形式灵活测试用例编写。
本文详细介绍了 foundry 的基本使用方法,旨在为开发者提供便捷的工具链,提高智能合约开发和测试的效率。通过上述指南,开发者能够更加熟练地掌握 foundry 的核心功能,为区块链项目开发提供有力支持。
以太åç ChainId ä¸ NetworkId
ChainId æ¯ EIP- å¼å ¥çä¸ä¸ªç¨æ¥åºåä¸å EVM é¾çä¸ä¸ªæ è¯ãå¦ä¸å¾æ示ï¼ä¸»è¦ä½ç¨å°±æ¯é¿å ä¸ä¸ªäº¤æå¨ç¾åä¹å被éå¤å¨ä¸åçé¾ä¸æ交ãæå¼å§ä¸»è¦æ¯ä¸ºäºé²æ¢ä»¥å¤ªå交æå¨ä»¥å¤ªç»å ¸ç½ç»ä¸éæ¾æè 以太ç»å ¸äº¤æå¨ä»¥å¤ªåç½ç»ä¸éæ¾ãå¨ä»¥å¤ªåç½ç»ä¸æ¯ä» è¿ä¸ªåºåéè¿ Spurious Dragon è¿ä¸ªç¡¬ååå级æ¿æ´»ã
å¼å ¥ ChainId åï¼å¸¦æ¥äºåªäºå½±åå¢ï¼
NetworkId 主è¦ç¨æ¥å¨ç½ç»å±æ è¯å½åçåºåé¾ç½ç»ãNetworkId ä¸ä¸è´ç两个èç¹æ æ³å»ºç«è¿æ¥ã
NetworkId æ æ³éè¿é ç½®æ件æå®ï¼æºè½éè¿åæ° --networkid æ¥æå®ãæ以æ们å¯å¨èªå·±ç§é¾èç¹ä¸éè¦è®°å¾å ä¸è¿ä¸ªåæ°ãå¦æä¸å è¿ä¸ªåæ°ä¹ä¸æå®ç½ç»ç±»åï¼é»è®¤ NetworkId çå¼å以太å主ç½ä¸è´ã
ä¸æ¯ã
è¿ä¸ªæ ¹æ®ä¸é¢çä»ç»å¯ä»¥å¾ææ¾ççåºï¼ä¸¤è 并没æé常é«çå ³è度ã
ç½ä¸å ä¹æææå°æ建以太åç§é¾çæç« ï¼é½è¦å¼ºè° NetworkId éè¦å genesis æ件é ChainId çå¼ç¸åãäºå®ä¸æ¯æ²¡å¿ è¦çã
å°±åä¸é¢è¿å¼ å¾å±ç¤ºçè¿æ ·ï¼å¾å¤å·²ç»å¨ä¸»ç½è¿è¡ç EVM é¾ï¼å®ä»¬ç ChainId å NetworkId 并ä¸ç¸åãæ¯å¦ä»¥å¤ªç»å ¸ï¼å®ç ChainId æ¯ ï¼ä½ NetworkId å以太å主ç½ä¸æ ·é½æ¯ 1ã
ä¹æ以å¾å¤æç« å¼ºè° ChainId å NetworkId è¦ä¿æä¸è´ï¼å¯è½å 为å¨æä¸æ®µæ¶é´å ï¼ä¸äºå¼åå·¥å ·æ¯å¦ MetaMaskï¼ä¼æ NetworkId å½ä½ ChainId æ¥ç¨ãä¸è¿ç°å¨ MetaMask å·²ç»æ¯æèªå®ä¹ ChainIdï¼ä»¥å¤ªåä¹æ·»å äº âeth_chainIdâ è¿ä¸ª RPC APIï¼ç¸ä¿¡ä¸¤è 误ç¨çæ åµä¼è¶æ¥è¶å°ã
死磕以太坊源码分析之Kademlia算法
Kademlia算法是一种点对点分布式哈希表(DHT),它在复杂环境中保持一致性和高效性。该算法基于异或指标构建拓扑结构,简化了路由过程并确保了信息的有效传递。通过并发的异步查询,系统能适应节点故障,而不会导致用户等待过长。
在Kad网络中,每个节点被视作一棵二叉树的叶子,其位置由ID值的最短前缀唯一确定。节点能够通过将整棵树分割为连续、不包含自身的子树来找到其他节点。例如,节点可以将树分解为以0、jsp表单源码、、为前缀的子树。节点通过连续查询和学习,逐步接近目标节点,最终实现定位。每个节点都需知道其各子树至少一个节点,这有助于通过ID值找到任意节点。
判断节点间距离基于异或操作。例如,节点与节点的距离为,高位差异对结果影响更大。异或操作的单向性确保了查询路径的稳定性,不同起始节点进行查询后会逐步收敛至同一路径,减轻热门节点的存储压力,加快查询速度。
Kad路由表通过K桶构建,每个节点保存距离特定范围内的节点信息。K桶根据ID值的前缀划分距离范围,每个桶内信息按最近至最远的顺序排列。K桶大小有限,确保网络负载平衡。当节点收到PRC消息时,会更新相应的K桶,保持网络稳定性和减少维护成本。K桶老化机制通过随机选择节点执行RPC_PING操作,避免网络流量瓶颈。
Kademlia协议包括PING、STORE、FIND_NODE、FIND_VALUE四种远程操作。这些操作通过K桶获得节点信息,并根据信息数量返回K个节点。系统存储数据以键值对形式,BitTorrent中key值为info_hash,value值与文件紧密相关。RPC操作中,接收者响应随机ID值以防止地址伪造,并在回复中包含PING操作校验发送者状态。
Kad提供快速节点查找机制,通过参数调节查找速度。节点x查找ID值为t的节点,递归查询最近的节点,直至t或查询失败。递归过程保证了收敛速度为O(logN),N为网络节点总数。查找键值对时,选择最近节点执行FIND_VALUE操作,缓存数据以提高下次查询速度。
数据存储过程涉及节点间数据复制和更新,确保一致性。加入Kad网络的节点通过与现有节点联系,并执行FIND_NODE操作更新路由表。节点离开时,系统自动更新数据,无需发布信息。Kad协议设计用于适应节点失效,周期性更新数据到最近邻居,确保数据及时刷新。
Hyperledger Fabric如何通过虚拟机部署以太坊智能合约
EVM作为用户链代码安装到Fabric中,通过它部署智能合约。单个EVM链代码能在通道上运行多个以太坊智能合约。链码不采用以太坊的共识方法。所有事务遵循Fabric事务流中的执行、订单、验证步骤。在不同组织中确保足够的对等方安装链代码,并设置一个确保一定程度分散的认可政策。与已部署的智能合约交互需要fab3,它通过以太坊JSON RPC API实现一组有限的API,用作web3提供者。
为了安装EVM链代码,链代码位于evmcc下的repo fabric-chaincode-evm。安装链码通常遵循常规步骤,基于fabric-samples中first-network教程的1.3版。
挂载EVM链代码需要更新docker-compose-cli.yaml,包含fabric-chaincode-evm。
通过运行启动网络,执行docker exec -it cli bash命令。如果成功,应显示提示信息。
更改目标对等方,使用环境变量如CORE_PEER_MSPCONFIGPATH、CORE_PEER_ADDRESS、CORE_PEER_LOCALMSPID和CORE_PEER_TLS_ROOTCERT_FILE。
在所有对等设备上安装EVM链代码,执行peer chaincode install和peer chaincode instantiate命令。
与EVM Chaincode交互,有通用方法:通常的Fabric工具和Web3。
使用Peer CLI,部署合约时,to字段设为零地址,input包含合约编译后的evm字节码。与合约交互,设置值,如使用set(x)函数,将值设置为,然后使用get()函数验证值是否正确。
使用Web3.js库可以改善部署和管理EVM智能合约的用户体验。它期望实现以太坊JSON RPC API的接口。通过设置Fab代理,实现与Fabric网络的交互。
部署合约时,需要evm字节码和合约的ABI。使用web3部署合约后,设置web3.eth.defaultAccount,与合约进行交互,如设置值或验证值。
综上所述,Hyperledger Fabric通过虚拟机部署以太坊智能合约的方法涉及链代码安装、交互和与合约的部署。在部署和管理过程中,利用Fabric工具和Web3.js库可以有效实现智能合约的管理与交互。