首页
通知
个人主页
热门文章
新闻
收藏与点赞
历史记录
创作者中心
设置
爱与和平520
13
个内容
关注
爱与和平520
关注
你好👋
3
关注
19
粉丝
13
点赞
0
分享
全部内容
帖子
爱与和平520
--
以太坊meme龙头潜力的铭文 cats,可以打几张防身给大家推荐一个具有以太坊meme龙头潜力的铭文 cats,现在才打了16% 推荐理由如下: 1.以太坊上目前还没有出现BRC20 rats这种现象级meme龙头币 2.cats 单词简单容易记住,老鼠和猫具有很强的关联性 3.谁能拒绝这么可爱的猫猫呢 按现在的gas只要0.6U的gas就可以打一张cats铭文 下面是ETH cats铭文的铸造方法: 1.推荐用一个新钱包(小狐狸),往里面打一点ETH,5~10U 的ETH即可 2.访问http://etch.market,点击右上角Connect Wallet按钮,链接你的小狐狸或者OK钱包 3.进入http://etch.market的Tokens页面找到cats,点击Ethscribe铭刻 4.在钱包点击确定 领一张cats回家,命运的齿轮或许因此而转动,祝大家牛市发财
以太坊meme龙头潜力的铭文 cats,可以打几张防身
给大家推荐一个具有以太坊meme龙头潜力的铭文 cats,现在才打了16%
推荐理由如下:
1.以太坊上目前还没有出现BRC20 rats这种现象级meme龙头币
2.cats 单词简单容易记住,老鼠和猫具有很强的关联性
3.谁能拒绝这么可爱的猫猫呢
按现在的gas只要0.6U的gas就可以打一张cats铭文
下面是ETH cats铭文的铸造方法:
1.推荐用一个新钱包(小狐狸),往里面打一点ETH,5~10U 的ETH即可
2.访问http://etch.market,点击右上角Connect Wallet按钮,链接你的小狐狸或者OK钱包
3.进入http://etch.market的Tokens页面找到cats,点击Ethscribe铭刻
4.在钱包点击确定
领一张cats回家,命运的齿轮或许因此而转动,祝大家牛市发财
爱与和平520
--
【合约开发语言solidity学习】solidity 事件币友们,又到了学习区块链技术的时候,熊市末期多看少动多学习,经过一个月的业余时间,瞎哥已经把solidity语言基础学完😁希望在ETH 1W美金以前把WEB3相关技术都能融会贯通$ETH 一、solidity语言中的事件是什么? 外部获取只能合约的状态变化,事件其实是以太坊的日志接口,在调用合约函数的时候需要把这个调用提交到以太坊网络上,这个过程比较耗时,通常是异步执行的,我们提交以后是不能直接获得结果的,我们要想知道结果可以使用事件来接收处理结果。 事件是用于合约外部进行通知,事件其实是以太坊的日志接口,日志是一个特殊结构,可以索引 。二、如何使用solidity事件? 使用event关键字来声明事件,这个事件是可继承的。solidity的看起来就是其他语言的一个log函数。 event EventName(uint param); 使用emit关键字来发出一个事件 emit EventName(10) 下面图是代码实战,可以看到logs里面有保存事件记录的信息 三、solidity事件的关键作用? solidity的主要作用是用于DAPP的监听,以下是dapp监听的伪代码 var ev = contractInstance.EventName(); ev.watch(function(err,result){ result.args.name;}) ;
【合约开发语言solidity学习】solidity 事件
币友们,又到了学习区块链技术的时候,熊市末期多看少动多学习,经过一个月的业余时间,瞎哥已经把solidity语言基础学完😁希望在ETH 1W美金以前把WEB3相关技术都能融会贯通
$ETH
一、solidity语言中的事件是什么? 外部获取只能合约的状态变化,事件其实是以太坊的日志接口,在调用合约函数的时候需要把这个调用提交到以太坊网络上,这个过程比较耗时,通常是异步执行的,我们提交以后是不能直接获得结果的,我们要想知道结果可以使用事件来接收处理结果。 事件是用于合约外部进行通知,事件其实是以太坊的日志接口,日志是一个特殊结构,可以索引 。二、如何使用solidity事件? 使用event关键字来声明事件,这个事件是可继承的。solidity的看起来就是其他语言的一个log函数。 event EventName(uint param); 使用emit关键字来发出一个事件 emit EventName(10) 下面图是代码实战,可以看到logs里面有保存事件记录的信息 三、solidity事件的关键作用? solidity的主要作用是用于DAPP的监听,以下是dapp监听的伪代码 var ev = contractInstance.EventName(); ev.watch(function(err,result){ result.args.name;}) ;
ETH
爱与和平520
--
【合约开发语言solidity学习】回退函数 Fallback币友们,又到了学习区块链技术的时候,今天给大家分享下什么是solidity的回退函数 。熊市末期很难熬,黑瞎子相信ETH下轮牛市一定会到1W美金一枚。$ETH 回退函数,英文名称Fallback,是一个无名称、无参数、无返回值的函数,一个合约可以有一个回退函数,当给合约转ETH时,需要有payable回退函数,如果调用合约时,没有匹配上任何函数,就会调用回退函数。 在solidity0.5版本以前,回退函数通常用于接收ETH转账,因为合约中没有默认接收函数,在solidity0.6版本后回退函数有了新的语法和关键字,可以用fallback关键字来显示声明回退函数 在solidity0.8以后回退函数已经不再是默认函数,而是被receive函数所取代。breceive关键字函数可以更清晰的表达其用途,在新版solidity中建议用receive函数来处理ETH转账逻辑。
【合约开发语言solidity学习】回退函数 Fallback
币友们,又到了学习区块链技术的时候,今天给大家分享下什么是solidity的回退函数 。熊市末期很难熬,黑瞎子相信ETH下轮牛市一定会到1W美金一枚。
$ETH
回退函数,英文名称Fallback,是一个无名称、无参数、无返回值的函数,一个合约可以有一个回退函数,当给合约转ETH时,需要有payable回退函数,如果调用合约时,没有匹配上任何函数,就会调用回退函数。
在solidity0.5版本以前,回退函数通常用于接收ETH转账,因为合约中没有默认接收函数,在solidity0.6版本后回退函数有了新的语法和关键字,可以用fallback关键字来显示声明回退函数
在solidity0.8以后回退函数已经不再是默认函数,而是被receive函数所取代。breceive关键字函数可以更清晰的表达其用途,在新版solidity中建议用receive函数来处理ETH转账逻辑。
ETH
爱与和平520
--
【合约开发语言solidity学习】solidity库的使用币友们,又到了学习区块链技术的时候,给大家充值下信仰,下轮牛市ETH一定会到1W美金。$ETH 一、什么是solidity的库? solidity的库是一个特殊的合约,它可以像合约一样部署,但没有状态变量,不能存ETH。库是可以重复使用的,部署一次,在不同的合约内反复使用,使用库可以节约gas,相同的代码不用重复部署多次。 二、solidity的库如何定义使用? 使用library关键字,函数库使用委托的方式调用DELEGATECALL。库代码实在发起合约中执行。 solidity语言可以通过使用 using for 关键字把函数库关联到一个新的类型。例如 using mathLib for B 三、solidity常用的类库有哪些? openzeppelin https://github.com/OpenZeppelin/openzeppelin-contracts ethereum-libraries https://github.com/modular-network/ethereum-libraries dapp-bin https://github.com/ethereum/dapp-bin/tree/master/library iterable_mapping 可变量Map、StringUtils字符串比较、linkedLisk双向链表 stringutils https://github.com/Arachnid/solidity-stringutils
【合约开发语言solidity学习】solidity库的使用
币友们,又到了学习区块链技术的时候,给大家充值下信仰,下轮牛市ETH一定会到1W美金。
$ETH
一、什么是solidity的库?
solidity的库是一个特殊的合约,它可以像合约一样部署,但没有状态变量,不能存ETH。库是可以重复使用的,部署一次,在不同的合约内反复使用,使用库可以节约gas,相同的代码不用重复部署多次。
二、solidity的库如何定义使用?
使用library关键字,函数库使用委托的方式调用DELEGATECALL。库代码实在发起合约中执行。
solidity语言可以通过使用 using for 关键字把函数库关联到一个新的类型。例如 using mathLib for B
三、solidity常用的类库有哪些?
openzeppelin
https://github.com/OpenZeppelin/openzeppelin-contracts
ethereum-libraries
https://github.com/modular-network/ethereum-libraries
dapp-bin
https://github.com/ethereum/dapp-bin/tree/master/library iterable_mapping
可变量Map、StringUtils字符串比较、linkedLisk双向链表
stringutils
https://github.com/Arachnid/solidity-stringutils
ETH
GAS
爱与和平520
--
【合约开发语言solidity学习】继承币友们,又到了学习区块链技术的时候,熊市末期多学习多储备,下轮牛市ETH一定会到1W美金一枚。$ETH solidity是一门面向对象语言,也有继承的特性。合约继承的合约可以访问所有非private成员。 一、solidity的继承是如何使用的,继承的访问有哪些? 在solidity中关键字is表示继承,通过复制代码的方式实现继承。solidity对象一共有4种可见性修饰符号分别是:external (外部访问)、public(内部/外部都可访问)internal (内部及继承)private(内部访问),其中external、public、internal都可以被继承。 solidity在继承合约时父合约有构造构造函数则需要实现父合约的构造函数。 下面图片是代码实战 二、solidity的多重继承 solidity可以在is 关键字后面接多个合约,父合约在is后的顺序很重要
【合约开发语言solidity学习】继承
币友们,又到了学习区块链技术的时候,熊市末期多学习多储备,下轮牛市ETH一定会到1W美金一枚。
$ETH
solidity是一门面向对象语言,也有继承的特性。合约继承的合约可以访问所有非private成员。
一、solidity的继承是如何使用的,继承的访问有哪些?
在solidity中关键字is表示继承,通过复制代码的方式实现继承。solidity对象一共有4种可见性修饰符号分别是:external (外部访问)、public(内部/外部都可访问)internal (内部及继承)private(内部访问),其中external、public、internal都可以被继承。
solidity在继承合约时父合约有构造构造函数则需要实现父合约的构造函数。 下面图片是代码实战
二、solidity的多重继承
solidity可以在is 关键字后面接多个合约,父合约在is后的顺序很重要
ETH
爱与和平520
--
【合约开发语言solidity学习】函数修饰符币友们,又到了学区块链技术的时候了😄,黑瞎子今天给大家分享下什么是solidity的函数修饰符。 一、payable函数修饰符 payable函数表示一个函数能附加以太币调用,可用于普通函数、构造函数和回退函数 二、函数修饰符 view view 表示一个函数不能修改状态,本地执行时不消耗gas。 哪些情况下认为是改了状态呢: 1.写状态变量 2.触发合约事件 3.创建其他的合约 4.call调用附加了以太币 5.调用了任务和没有view或者pure修饰的函数 6.使用了低级别的调用(low-level calls) 三、函数修饰符 pure pure表示一个函数不读取状态,也不修改状态,本地执行不消耗gas。 下面几种情况认为时读取了状态: 1.读取状态变量 2.访问了.balance属性 3.访问了block、tx、msg成员(msg.sig和msg.data除外) 4.调用了任何没有pure修饰的函数 四、代码实战 函数修饰符 payable 函数修饰符 view和pure
【合约开发语言solidity学习】函数修饰符
币友们,又到了学区块链技术的时候了😄,黑瞎子今天给大家分享下什么是solidity的函数修饰符。
一、payable函数修饰符
payable函数表示一个函数能附加以太币调用,可用于普通函数、构造函数和回退函数
二、函数修饰符 view
view 表示一个函数不能修改状态,本地执行时不消耗gas。
哪些情况下认为是改了状态呢:
1.写状态变量
2.触发合约事件
3.创建其他的合约
4.call调用附加了以太币
5.调用了任务和没有view或者pure修饰的函数
6.使用了低级别的调用(low-level calls)
三、函数修饰符 pure
pure表示一个函数不读取状态,也不修改状态,本地执行不消耗gas。
下面几种情况认为时读取了状态:
1.读取状态变量
2.访问了.balance属性
3.访问了block、tx、msg成员(msg.sig和msg.data除外)
4.调用了任何没有pure修饰的函数
四、代码实战
函数修饰符 payable
函数修饰符 view和pure
ETH
GAS
DATA
爱与和平520
--
查看原文
【合约开发语言solidity学习】 函数修改器一、什么是函数修改器? 函数修改器(Modifier)可以用来改变一个函数的行为,通常用于在函数执行时检查某种前置条件,有点类似于物件导向程式设计里面的切面或中间件。和切面、中间件不同的是,solidity的函数修改器会把修改器的程式码插入要修改的函数前面去执行。 modifier onlyAdmin { require(msg.sender==admin); // do some thing... _; } function start() public onlyAdmin{
【合约开发语言solidity学习】 函数修改器
一、什么是函数修改器?
函数修改器(Modifier)可以用来改变一个函数的行为,通常用于在函数执行时检查某种前置条件,有点类似于物件导向程式设计里面的切面或中间件。和切面、中间件不同的是,solidity的函数修改器会把修改器的程式码插入要修改的函数前面去执行。 modifier onlyAdmin {
require(msg.sender==admin);
// do some thing...
_;
}
function start() public onlyAdmin{
爱与和平520
--
【合约开发语言solidity学习】数学函数api和加密api一、下面是一些常用的数学函数,使用他们更加安全可靠 addmod(uint x, uint y, uint k) returns (uint): 计算 x + y 然后对 k 取模。 mulmod(uint x, uint y, uint k) returns (uint): 计算 x * y 然后对 k 取模。 二、hash函数相关API hash函数又称散列函数:任意长度输入,通过散列算法(MD4、MD5、ripemd-160、SHA「Secure Hash Algorithm」密码散列函数家族),变换成固定长度的输出。 SHA家族: SHA1:160位bit值,目前被证明不是特别安全,有可能不同输入的值会得到同一个hash值 SHA2:SHA-224、SHA-256、SHA-384和SHA-512,后面不同的数字代表计算出的hash值长度 SHA3:Keccak算法 solidity提供了哪些hash函数呢? keccak256(...) returns (bytes32): 基于Keccak-256哈希算法,计算不定长输入的哈希值。 sha256(...) returns (bytes32): 基于SHA-256哈希算法,计算不定长输入的哈希值。 ripemd160(...) returns (bytes20): 基于RIPEMD-160哈希算法,计算不定长输入的哈希值。 sha3(...) returns (bytes32): 这实际上是对keccak256函数的别名,Solidity0.4.16及以后的版本不再建议使用该函数。 在solidity中的函数选择器hash值就是用keccak256哈希算法计算出来的,取前4个字节的hash值作为函数选择器的标识 三、ecrecover函数 我们可以通过椭圆曲线签名来恢复与公钥关联的地址,ecrecover(bytes32 hash,uint8 v,bytes32 r,bytes32 s)returns(address) 四个参数分别是: hash:被签名数据的hash值,r、s、v分别来自签名结果串。 r = signature[0:64] s = signature[64:128] v = signature[128:130]+27
【合约开发语言solidity学习】数学函数api和加密api
一、下面是一些常用的数学函数,使用他们更加安全可靠
addmod(uint x, uint y, uint k) returns (uint): 计算 x + y 然后对 k 取模。
mulmod(uint x, uint y, uint k) returns (uint): 计算 x * y 然后对 k 取模。
二、hash函数相关API
hash函数又称散列函数:任意长度输入,通过散列算法(MD4、MD5、ripemd-160、SHA「Secure Hash Algorithm」密码散列函数家族),变换成固定长度的输出。
SHA家族:
SHA1:160位bit值,目前被证明不是特别安全,有可能不同输入的值会得到同一个hash值
SHA2:SHA-224、SHA-256、SHA-384和SHA-512,后面不同的数字代表计算出的hash值长度
SHA3:Keccak算法
solidity提供了哪些hash函数呢?
keccak256(...) returns (bytes32): 基于Keccak-256哈希算法,计算不定长输入的哈希值。
sha256(...) returns (bytes32): 基于SHA-256哈希算法,计算不定长输入的哈希值。
ripemd160(...) returns (bytes20): 基于RIPEMD-160哈希算法,计算不定长输入的哈希值。
sha3(...) returns (bytes32): 这实际上是对keccak256函数的别名,Solidity0.4.16及以后的版本不再建议使用该函数。
在solidity中的函数选择器hash值就是用keccak256哈希算法计算出来的,取前4个字节的hash值作为函数选择器的标识
三、ecrecover函数
我们可以通过椭圆曲线签名来恢复与公钥关联的地址,ecrecover(bytes32 hash,uint8 v,bytes32 r,bytes32 s)returns(address)
四个参数分别是:
hash:被签名数据的hash值,r、s、v分别来自签名结果串。
r = signature[0:64]
s = signature[64:128]
v = signature[128:130]+27
爱与和平520
--
【合约开发语言solidity学习】区块交易信息API和ABI 古人云熊市多读书多学习。话不多说,黑瞎子今天给大家来分享一下ETH智能合约开发语言solidity中区块交易信息API和ABI的相关知识,码字不易,希望大家多多支持,期待下轮牛市ETH突破一万美金🙌$ETH 一、区块和交易常用的API有哪些? blockhash(uint blockNumber) 返回给定区块号的哈希值,只支持最近的256个区块 block.coinbase returns(address) 当前块矿工的地址 block.difficulty returns(uint) 当前块的难度 block.gaslimit returns(uint) 当前块的gaslimit block.number returns(uint) 当前块的块号 block.timestamp returns(uint) 当前块的时间戳 gasleft returns(uint) 获取剩余gas msg.data returns(uint256) 完整的调用数据(calldata) msg.sender returns(address) 当前调用发起人的地址 msg.sig returns(bytes4) 调用数据(calldata)的前四个字节,例如函数标识符 msg.value returns(uint) 这个消息所附带的以太币,单位为wei tx.gasprice returns(uint) 交易的gas价格 tx.origin returns(address) 交易的发送者 二、ABI编码 ABI全称是Application Binary Interface 应用程序二进制接口,我们向合约地址发起一个交易(调用函数)其交易内容就是ABI编码数据。下图就是ABI ABI相关编码函数 abi.encode(...) returns(bytes) 计算参数的ABI编码 abi.encodePacked(...) returns(bytes) 计算参数的紧密打包编码 abi.encodeWithSelector(...) returns(bytes) 计算函数选择器和参数的ABI编码 abi.encodeWithSignature(...) returns(bytes) 计算函数选择器和参数的ABI编码 三、相关代码练习
【合约开发语言solidity学习】区块交易信息API和ABI
古人云熊市多读书多学习。话不多说,黑瞎子今天给大家来分享一下ETH智能合约开发语言solidity中区块交易信息API和ABI的相关知识,码字不易,希望大家多多支持,期待下轮牛市ETH突破一万美金🙌$ETH
一、区块和交易常用的API有哪些?
blockhash(uint blockNumber) 返回给定区块号的哈希值,只支持最近的256个区块
block.coinbase returns(address) 当前块矿工的地址
block.difficulty returns(uint) 当前块的难度
block.gaslimit returns(uint) 当前块的gaslimit
block.number returns(uint) 当前块的块号
block.timestamp returns(uint) 当前块的时间戳
gasleft returns(uint) 获取剩余gas
msg.data returns(uint256) 完整的调用数据(calldata)
msg.sender returns(address) 当前调用发起人的地址
msg.sig returns(bytes4) 调用数据(calldata)的前四个字节,例如函数标识符
msg.value returns(uint) 这个消息所附带的以太币,单位为wei
tx.gasprice returns(uint) 交易的gas价格
tx.origin returns(address) 交易的发送者
二、ABI编码
ABI全称是Application Binary Interface 应用程序二进制接口,我们向合约地址发起一个交易(调用函数)其交易内容就是ABI编码数据。下图就是ABI
ABI相关编码函数
abi.encode(...) returns(bytes) 计算参数的ABI编码
abi.encodePacked(...) returns(bytes) 计算参数的紧密打包编码
abi.encodeWithSelector(...) returns(bytes) 计算函数选择器和参数的ABI编码
abi.encodeWithSignature(...) returns(bytes) 计算函数选择器和参数的ABI编码
三、相关代码练习
爱与和平520
--
【合约开发语言solidity学习】 认识日期时间及时间戳一、sodidity的时间单位 sodidity一共有6个时间单位, seconds、minutes、hours、days、weeks、years,各时间单位转换,solidity的时间换算并没有考虑闰年闰月的情况,时间换算并不十分的准确。 下面是各个时间单位的关系 二、如何获取当前时间 通过bolck对象里的timestamp属性就可以获取当前的时间戳 block.timestamp; 三、如何实现一天内只执行一次? 实现思路保持上一次的执行时间,每次执行时间和上一次执行时间进行对比,如果大于一天则可以执行,代码如下 四、尝试使用solidity 时间相关第三方类库 solidity也有类似php Carbon的时间类库,我用的是DateTime类库,从Github上看已经六年没更新了,简单修改下还能用。。这个类库封装了一些获取当前时间的快捷方法,还是很方便的,可以快速获取当前年、月、日等等 如果你觉得这篇文章对你有帮助,请给我点赞吧~ 😁
【合约开发语言solidity学习】 认识日期时间及时间戳
一、sodidity的时间单位
sodidity一共有6个时间单位, seconds、minutes、hours、days、weeks、years,各时间单位转换,solidity的时间换算并没有考虑闰年闰月的情况,时间换算并不十分的准确。
下面是各个时间单位的关系
二、如何获取当前时间
通过bolck对象里的timestamp属性就可以获取当前的时间戳 block.timestamp;
三、如何实现一天内只执行一次?
实现思路保持上一次的执行时间,每次执行时间和上一次执行时间进行对比,如果大于一天则可以执行,代码如下
四、尝试使用solidity 时间相关第三方类库
solidity也有类似php Carbon的时间类库,我用的是DateTime类库,从Github上看已经六年没更新了,简单修改下还能用。。这个类库封装了一些获取当前时间的快捷方法,还是很方便的,可以快速获取当前年、月、日等等
如果你觉得这篇文章对你有帮助,请给我点赞吧~ 😁
爱与和平520
--
如何从零开始搭建一个ETH归档节点-01 一、ETH客户端对配置的要求? ETH归档节点对网络、cpu并没有非常高的要求,主要是在存储上有要求,使用 Geth、Nethermind客户端同步归档节点需要12T以上磁盘空间,而Erigon客户端用一块4T的硬盘就可以了。黑瞎子目前是用的凯侠CD6 8T的固态硬盘,如果对性能不做要求使用机械硬盘也是可以的,就是同步时间会慢很多,可能需要十几天时间才能完成归档节点的搭建。 黑瞎子目前使用过2台配置不同的机器都运行过ETH归档节点,均无问题。机器配置如下,各位币有可以作个参考 主用机 主板 Z790ProArt CPU 13900K 内存 128G 海力士 DDR5 系统硬盘 PM9A1 1T 存储硬盘 凯侠CD6 7.68T 备份硬盘 希捷 8T机械硬盘 备用机 主板 影驰B450M CPU AMD 3600 内存 32G 威刚 DDR4 系统硬盘 三星870evo 250G 存储硬盘 希捷 8T机械硬盘 二、为什么要用VMware来搭建? 主因是前段时间天气太热,黑瞎子的I9主机长期24小时不停机运作,又忘记开空调,导致热炸鸡玻璃碎了一地。因为erigon客户端和teku客户端是会把cpu核心数用满的。不管是使用13900k还是amd 3600,都会把cpu占满,发热和功耗都非常恐怖。 根据黑瞎子的使用经验来看,13900k和amd 3600两者同步速度其实没有太大的差别,只要用了固态硬盘都不会落后太多区块,网速好时基本上只落后几个区块。 所以使用虚拟机能省电费,还能控制发热,同时vmWare的虚拟机文件也可以快速的迁移和复制,在erigon、teku客户端升级调试时也比较方便,安全性也有保证,如果被黑了也只是虚拟机被黑不会涉及一台主机都被黑。 总结下来就是:安全、省心省力,还节能。 三、搭建流程概览 1.创建一个Ubuntu虚拟机,瞎哥用的是Ubuntu 22.04版本,也尝试过centos,centos上的默认软件太老了,对PC主板兼容性也不太好,不推荐。 2.挂载物理硬盘 3.下载安装ETH执行客户端erigon 4.执行erigon客户端同步区块数据 5.下载安装ETH共识客户端teku 6.执行teku客户端同步eth2.0以后的区块数据 四、搭建流程详细记录 搭建流程如下 1.创建一个Ubuntu虚拟机,这个想必大家都会了,省略。。 2.挂载物理硬盘 2.1 在虚拟机设置里点添加硬盘 2.2 如果是机械硬盘或者sata固态就选 SATA、m2的ssd就选 NVME, 下一步选使用物理硬盘,完成后就可以开机了 2.3 开机后挂载硬盘,相关操作命令如下 // 查看机器可用的硬盘 fdisk -l // 创建一个硬盘挂载目录 mkdir /mnt/data // 挂载硬盘,注意如果是新硬盘,则需要格式化成ext4格式(mkfs -t ext4 /dev/nvme0n2) sudo mount -t ext4 /dev/nvme0n2 /mnt/data 有条件可以设置成开机自动挂载 3.下载安装ETH执行客户端erigon 3.1 创建一个目录存放erigon客户端,黑瞎子喜欢放在/home/wwwroot目录下 mkdir -p /home/wwwroot/erigon cd /hom/wwwroot/erigon 3.2 下载erigon客户端源代码,并进行编译,注意这里需要安装golang环境、gcc和g++ 3.3 编译源码,生成erigon客户端,这里耗时会有点就,要下载很多依赖包,如果中途有报错可以多尝试几次 编译完后大概是这个样子 3.4 运行erigon客户端,开始同步数据,大概要下载320G的数据包,下载下来后还会进行解压和数据还原,一共有15阶段,15个阶段全部完成eth归档节点就搭建好了 ./build/bin/erigon --datadir=/mnt/data/erigon 客户端持续运行中 总结 进行到上面的步骤只要耐心等待就可以完成搭建eth节点的一半操作了,等erigon客户端数据同步到ETH2.0附近的时候,就需要安装teku共识客户端同步ETH2.0以后的数据,同步速度这一块黑瞎子低配机器在使用机械硬盘的情况下中途陆陆续续花了大概12天时间左右,使用高配机器则在1星期时间左右。 PS: 安装teku客户端文章将会在后面推出,有兴趣的朋友可以自己开始搭建啦。
如何从零开始搭建一个ETH归档节点-01
一、ETH客户端对配置的要求?
ETH归档节点对网络、cpu并没有非常高的要求,主要是在存储上有要求,使用 Geth、Nethermind客户端同步归档节点需要12T以上磁盘空间,而Erigon客户端用一块4T的硬盘就可以了。黑瞎子目前是用的凯侠CD6 8T的固态硬盘,如果对性能不做要求使用机械硬盘也是可以的,就是同步时间会慢很多,可能需要十几天时间才能完成归档节点的搭建。
黑瞎子目前使用过2台配置不同的机器都运行过ETH归档节点,均无问题。机器配置如下,各位币有可以作个参考
主用机
主板 Z790ProArt
CPU 13900K
内存 128G 海力士 DDR5
系统硬盘 PM9A1 1T
存储硬盘 凯侠CD6 7.68T
备份硬盘 希捷 8T机械硬盘
备用机
主板 影驰B450M
CPU AMD 3600
内存 32G 威刚 DDR4
系统硬盘 三星870evo 250G
存储硬盘 希捷 8T机械硬盘
二、为什么要用VMware来搭建?
主因是前段时间天气太热,黑瞎子的I9主机长期24小时不停机运作,又忘记开空调,导致热炸鸡玻璃碎了一地。因为erigon客户端和teku客户端是会把cpu核心数用满的。不管是使用13900k还是amd 3600,都会把cpu占满,发热和功耗都非常恐怖。
根据黑瞎子的使用经验来看,13900k和amd 3600两者同步速度其实没有太大的差别,只要用了固态硬盘都不会落后太多区块,网速好时基本上只落后几个区块。
所以使用虚拟机能省电费,还能控制发热,同时vmWare的虚拟机文件也可以快速的迁移和复制,在erigon、teku客户端升级调试时也比较方便,安全性也有保证,如果被黑了也只是虚拟机被黑不会涉及一台主机都被黑。
总结下来就是:安全、省心省力,还节能。
三、搭建流程概览
1.创建一个Ubuntu虚拟机,瞎哥用的是Ubuntu 22.04版本,也尝试过centos,centos上的默认软件太老了,对PC主板兼容性也不太好,不推荐。
2.挂载物理硬盘
3.下载安装ETH执行客户端erigon
4.执行erigon客户端同步区块数据
5.下载安装ETH共识客户端teku
6.执行teku客户端同步eth2.0以后的区块数据
四、搭建流程详细记录
搭建流程如下
1.创建一个Ubuntu虚拟机,这个想必大家都会了,省略。。
2.挂载物理硬盘
2.1 在虚拟机设置里点添加硬盘
2.2 如果是机械硬盘或者sata固态就选 SATA、m2的ssd就选 NVME,
下一步选使用物理硬盘,完成后就可以开机了
2.3 开机后挂载硬盘,相关操作命令如下
// 查看机器可用的硬盘
fdisk -l
// 创建一个硬盘挂载目录
mkdir /mnt/data
// 挂载硬盘,注意如果是新硬盘,则需要格式化成ext4格式(mkfs -t ext4 /dev/nvme0n2)
sudo mount -t ext4 /dev/nvme0n2 /mnt/data
有条件可以设置成开机自动挂载
3.下载安装ETH执行客户端erigon
3.1 创建一个目录存放erigon客户端,黑瞎子喜欢放在/home/wwwroot目录下
mkdir -p /home/wwwroot/erigon
cd /hom/wwwroot/erigon
3.2 下载erigon客户端源代码,并进行编译,注意这里需要安装golang环境、gcc和g++
3.3 编译源码,生成erigon客户端,这里耗时会有点就,要下载很多依赖包,如果中途有报错可以多尝试几次
编译完后大概是这个样子
3.4 运行erigon客户端,开始同步数据,大概要下载320G的数据包,下载下来后还会进行解压和数据还原,一共有15阶段,15个阶段全部完成eth归档节点就搭建好了
./build/bin/erigon --datadir=/mnt/data/erigon
客户端持续运行中
总结
进行到上面的步骤只要耐心等待就可以完成搭建eth节点的一半操作了,等erigon客户端数据同步到ETH2.0附近的时候,就需要安装teku共识客户端同步ETH2.0以后的数据,同步速度这一块黑瞎子低配机器在使用机械硬盘的情况下中途陆陆续续花了大概12天时间左右,使用高配机器则在1星期时间左右。
PS: 安装teku客户端文章将会在后面推出,有兴趣的朋友可以自己开始搭建啦。
爱与和平520
--
【合约开发语言solidity学习】 类型转换和delete指令一、什么是类型转换 类型转换是将一个类型转为另一个类型,转换可分为隐式和显式转换。 隐式转换是在运算符两边有不同类型,在不会丢失数据的情况下,编译器会尝试隐式转换类型。 例如:uint8 -> uint16,uint256可以转换 uint16,uint256 -> uint8 不会自动转换,因为可能会丢失数据 显式转换是通过代码强制转换,例如上面的uint16转换到uint8,如果你知道这个变量转换没问题,就可以自己强制转换。 例如 uint256 num = 100; uint8(num); 就可以强制转换为 uint类型 强制转换需要注意,如果进行了不正确的转换会报错,如果变量转换为一个更小类型的数据类型,多余部分会被截断。 二、delete重置变量 delete操作符是用于对变量进行重置,需要注意的是delete对映射类型无效(可以delete mapping里面的元素),delete不影响拷贝变量值 三、写代码练习一下吧
【合约开发语言solidity学习】 类型转换和delete指令
一、什么是类型转换
类型转换是将一个类型转为另一个类型,转换可分为隐式和显式转换。
隐式转换是在运算符两边有不同类型,在不会丢失数据的情况下,编译器会尝试隐式转换类型。
例如:uint8 -> uint16,uint256可以转换
uint16,uint256 -> uint8 不会自动转换,因为可能会丢失数据
显式转换是通过代码强制转换,例如上面的uint16转换到uint8,如果你知道这个变量转换没问题,就可以自己强制转换。
例如 uint256 num = 100; uint8(num); 就可以强制转换为 uint类型
强制转换需要注意,如果进行了不正确的转换会报错,如果变量转换为一个更小类型的数据类型,多余部分会被截断。
二、delete重置变量
delete操作符是用于对变量进行重置,需要注意的是delete对映射类型无效(可以delete mapping里面的元素),delete不影响拷贝变量值
三、写代码练习一下吧
爱与和平520
--
【合约开发语言solidity学习】 结构体struct一、 关键字struct自定义类型 struct Player{ string name; uint coins; } 二、结构体的声明和初始化 1.仅声明变量,不初始化 Player public player; 2.按成员顺序初始化,如果结构体有mapping需要跳过 Player public player = Player(1,"Tom",1); 3.通过指定成员名称初始化,这样就不用指定成员的顺序,在结构体变量多的时候,推荐这样初始化 Player public player = Player({id:1,level:1}); 三、结构体的访问和赋值 结构体通过点号进行成员访问,例如:xxx.name,赋值也是一样 xxx.name="Tom" players[msg.sender].name = name; 四、结构体的限制 结构体目前仅支持在合约内部使用,或继承合约内使用。如果要在参数和返回值中使用结构体,函数必须声明internal,0.8版本以后没有这个问题。 五、写代码来练习一下吧
【合约开发语言solidity学习】 结构体struct
一、 关键字struct自定义类型
struct Player{
string name;
uint coins;
}
二、结构体的声明和初始化
1.仅声明变量,不初始化
Player public player;
2.按成员顺序初始化,如果结构体有mapping需要跳过
Player public player = Player(1,"Tom",1);
3.通过指定成员名称初始化,这样就不用指定成员的顺序,在结构体变量多的时候,推荐这样初始化
Player public player = Player({id:1,level:1});
三、结构体的访问和赋值
结构体通过点号进行成员访问,例如:xxx.name,赋值也是一样 xxx.name="Tom"
players[msg.sender].name = name;
四、结构体的限制
结构体目前仅支持在合约内部使用,或继承合约内使用。如果要在参数和返回值中使用结构体,函数必须声明internal,0.8版本以后没有这个问题。
五、写代码来练习一下吧
爱与和平520
--
【合约开发语言solidity学习】 映射类型mapping1.映射类型是什么 映射类型和PHP的数组比较像是一直key-value的关系,不同之处是映射类型mapping,定义好映射关系后key和value的数据类型都是固定不能变。mapping在合约中通常用于存储数据,例如存储用户地址和其代币余额,又或者是存储用户地址和其等级。 2.映射类型如何定义和访问 映射类型通过mapping字段定义,其key的类型不能是变长数组、合约类型、嵌套类型,value类型则无限制。 mapping可以通过合约地址访问,例如 balance[userAddr] ,注意如果通过一个不存在的key去访问这个mapping,则会返回value类型的默认值。 3.mapping的局限性 mapping只能作为状态变量来使用(用php语言来讲就是只能在类的成员变量中定义,无法在函数内部定义) mapping无法遍历访问,没有长度,没有key集合、value集合,只是一个基础数据类型,如果要想实现更丰富的功能,就只能通过额外的类库来实现相关功能,例如自己定义一个结构体和对于的操作函数来实现。 struct itmap { mapping(address => uint) data; uint size; } 3.写代码来练习一下吧
【合约开发语言solidity学习】 映射类型mapping
1.映射类型是什么
映射类型和PHP的数组比较像是一直key-value的关系,不同之处是映射类型mapping,定义好映射关系后key和value的数据类型都是固定不能变。mapping在合约中通常用于存储数据,例如存储用户地址和其代币余额,又或者是存储用户地址和其等级。
2.映射类型如何定义和访问
映射类型通过mapping字段定义,其key的类型不能是变长数组、合约类型、嵌套类型,value类型则无限制。
mapping可以通过合约地址访问,例如 balance[userAddr] ,注意如果通过一个不存在的key去访问这个mapping,则会返回value类型的默认值。
3.mapping的局限性
mapping只能作为状态变量来使用(用php语言来讲就是只能在类的成员变量中定义,无法在函数内部定义)
mapping无法遍历访问,没有长度,没有key集合、value集合,只是一个基础数据类型,如果要想实现更丰富的功能,就只能通过额外的类库来实现相关功能,例如自己定义一个结构体和对于的操作函数来实现。
struct itmap
{
mapping(address => uint) data;
uint size;
}
3.写代码来练习一下吧
登录解锁更多内容
登录
浏览最新的加密货币新闻
⚡️ 参与加密货币领域的最新讨论
💬 与喜爱的创作者互动
👍 查看感兴趣的内容
邮箱/手机号码
注册
登录
热门话题
币安Alpha上新
74.3M 次浏览
49,835 人讨论中
🚨 币安Alpha不断上新代币——快来广场聊聊您对Alpha代币的看法? 币安广场现已支持: 1. 可在帖文中添加Alpha代币的实时K线图表,并自动链接到代币交易页面。 2. 每个 Alpha 代币的交易页面都新增了“广场”栏位,您可加入该代币的实时社区讨论。 这些新功能可帮助您紧跟实时热点讨论趋势、提升内容质量、扩大影响力。 📌 您可参考以上如何添加Alpha代币K线的教程,将您想要讨论的Alpha 代币K线添加到帖子中。立即发帖试试吧!
币安广场
67次点赞
97.6k 次浏览
韩国加密政策
1.7M 次浏览
1,888 人讨论中
科技巨头入场稳定币
1.7M 次浏览
1,451 人讨论中
查看更多
实时新闻
CEXs现货交易量降至2020年水平,市场转向HODL模式
--
James Wynn 平掉 BTC 多头仓位并开设空头仓位
--
Metaplanet 计划筹集 54 亿美元并大幅增加比特币储备
--
特朗普呼吁派遣国民警卫队应对洛杉矶抗议
--
Cathie Wood:BTC 价格将在未来五年内增长 15 倍
--
查看更多
热门文章
#币安Alpha上新 用钱包刷Alpha 积分的兄弟们注意了!当你使用钱包与钱包互转以后,链上就有人做的地址捕捉器就会第
币圈老炮-铭赫
牛市狂想曲:现货稳如狗,合约火葬场 看着别人合约一天翻倍,你心痒吗?别急,先听我说个故事... 昨天老王10倍杠杆做多,
鲨鱼趋势论
把usdt/koge刷量磨损跟进。 今天进入钱包发现防夹功能系统自动关闭了。尤其闪退时候我是每次进入先把滑点,防夹都调
牛郎君-加密
🚨 马斯克终于发币了,模因战争上线!$ELON DOGE 正在预售中 马斯克真的发币了,而且直接把火力对准了老对手特
全新塔斯汀韭菜堡
贝莱德扫货ETH!2800关口生死战 #ETH 全球资管老大贝莱德正疯狂买入以太坊,单日扫货量暴增!这波操作被看
Web3真理
查看更多
网站地图
Cookie偏好设置
平台条款和条件