以太坊外部账户 被公布的以太坊私钥
一、以太坊的私钥、公钥、地址、账户
以太坊的私钥、公钥、地址、账户
私钥
定义:私钥是256bit(32字节)的随机数,用16进制表示就是64个字符。私钥的生成本质上是在一个非常大的数字空间(1到2^256)中随机选择一个数字,并通过SHA256等哈希算法计算其哈希值作为私钥。私钥是加密货币安全性的基础,必须严格保密。公钥
定义:公钥是通过私钥生成的,具体方法是使用椭圆曲线算法(ECDSA-secp256k1)对私钥进行运算,得到一个64字节的公钥。公钥通常表示为65字节的字符串,前缀为“04”,后面跟着X坐标和Y坐标(各32字节)。
生成过程:私钥通过椭圆曲线算法映射成公钥,这个过程是确定性的,即相同的私钥总是生成相同的公钥。
地址
定义:地址是根据公钥计算出来的,用于在以太坊网络中唯一标识一个账户。地址的生成过程包括对公钥进行Keccak-256哈希运算,然后取哈希值的最后40个字符(即20字节),并在前面加上“0x”前缀。
生成过程:
对公钥进行Keccak-256哈希运算,得到32字节的哈希值。
取哈希值的最后20字节,作为地址的一部分。
在前面加上“0x”前缀,形成完整的以太坊地址。
账户
定义:账户是以太坊网络中的基本单位,用于存储余额、交易计数(nonce)以及状态和代码(对于合约账户)。
外部账户:由私钥控制,可以发起交易和签署消息。
合约账户:由智能合约代码控制,当满足特定条件时,可以自动执行交易或操作。
属性:
地址:用于在以太坊网络中唯一标识账户。
余额:账户中存储的以太币数量。
nonce:交易计数,用于确保交易的唯一性和防止重放攻击。
状态和代码:对于外部账户,状态和代码为空;对于合约账户,则包含合约的状态和代码。
示例
以下是一个私钥、公钥和地址生成的示例:
私钥:18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725公钥:0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6地址:0x1016f75c54c607f082ae6b0881fac0abeda21781在这个示例中,私钥通过椭圆曲线算法生成了公钥,公钥再通过Keccak-256哈希运算和取最后20字节的方式生成了地址。这个地址在以太坊网络中唯一标识了一个账户,该账户可以是外部账户,也可以是合约账户。
这张图直观地展示了以太坊中私钥、公钥和地址之间的关系。私钥是安全的基石,公钥用于验证私钥的所有权,而地址则是账户在以太坊网络中的唯一标识。
二、以太坊交易规则详解
以太坊交易规则涉及多方面内容。它基于区块链技术,交易记录公开且不可篡改。交易需有一定的Gas费用来支付矿工处理交易的成本。
1.账户与地址:以太坊有外部账户和合约账户。外部账户由用户私钥控制,合约账户则是部署智能合约后生成的。每个账户对应一个唯一的地址,通过地址来标识和进行交易。地址是由数字和字母组成的字符串,长度为40位十六进制。
2.交易结构:一笔以太坊交易包含发送方地址、接收方地址、交易金额、Gas价格、Gas上限等信息。Gas价格决定了矿工处理这笔交易愿意接受的费用,Gas上限则限制了交易消耗Gas的最大值。
3.交易流程:用户使用钱包软件生成交易,设置好各项参数后进行签名。签名后的交易被广播到以太坊网络中,矿工节点会验证交易的有效性,包括检查账户余额是否足够支付交易金额和Gas费用等。如果验证通过,矿工将交易打包进区块,随着新区块的产生,交易就被确认,资金也完成了转移。
4.智能合约交互:以太坊的一大特色是智能合约。交易可以与智能合约进行交互,触发合约中的代码执行特定操作,比如转移资产、执行复杂业务逻辑等。这使得以太坊在去中心化应用开发等领域有广泛应用。
三、以太坊经典是什么
1.什么是以太经典?
ETC(Ethereum Classic)是以太坊在1,920,000个块后硬分叉出的分叉币种,功能和以太坊极为类似。ETC秉承去中心化理念,支持区块链保证的共识机制。ETC坚信,区块链一旦开始运行,它的发展方向就不被任何中心团队所左右,而是按照参与整个网络人员的共识和全网算力的共识所决定。
2016年7月份进行的以太坊区块链硬分叉旨在将被黑客盗窃的The DAO资金转移到一个由投资者掌控的账户,并让旧的交易记录被历史遗忘。大多数以太坊开发者都参与了这次逆转,交易所、创业公司和该生态系统中的其他成员也参与了。几天之后,该项目恢复了常态。但是并非所有人都想将旧的交易记录忘记。于是一小部分矿工继续使用原来的区块链,以此作为一种抗议,他们将硬分叉描述为是对The DAO这个废弃项目的抽资行为。于是Ethereum Classic(ETC)就诞生了。
2.详细参数
中文名:以太经典英文名:Ethereum Classic英文简称:ETC
研发者:以太经典团队核心算法:Ethash共识证明:POW
发布日期:2016/7/20区块时间:约15-17秒/块
货币总量:固定为2.1亿,最高不超过2.3亿,每500万个区块减速20%,第一次减产时间预计为2017年12月
主要特色:独立的加密货币
四、以太坊中的nonce
以太坊中的nonce是一个标量值,等于从该地址发送的交易数量(对于包含关联代码的账户,则是该账户创建的合约数量)。
nonce的作用和目的维护交易顺序
在以太坊中,所有的交易都是基于账户的,因此需要对每次交易都按顺序进行记录。nonce的值就代表了这个顺序。
当你希望发送两个交易a和b,并希望它们按照此顺序打包时,nonce属性就显得尤为重要。如果没有nonce,矿工将无法知道你希望维护的交易顺序。
通过nonce,你可以很容易地指定交易的执行顺序。在构建交易时,你可以自己指定nonce的值,来确保交易按照你希望的顺序执行。例如,在web3.eth.sendTransaction中,nonce可以作为入参被指定。
防止“双花”
“双花”问题指的是同一地址的同一笔钱被支付给两个收款方。nonce机制可以有效地防止这一问题。
以太坊节点要求每笔交易必须有一个nonce数值。每个账户从同一个节点发起交易时,这个nonce值从0开始计数,每发送一笔交易,nonce对应加1。
当前面的nonce处理完成之后,才会处理后面的nonce。这意味着,如果尝试发送一个nonce值小于之前已经有交易使用的nonce的交易,该交易会被直接拒绝。
如果发送一个nonce值远大于当前nonce的交易,该交易会一直处于队列中等待(pending状态),直到补齐开始nonce到那个值之间的所有nonce为止。
因此,在以太坊的交易中,对于每一个地址,nonce值是严格按照递增顺序排列的,不会重复,也不会跳跃。这种机制确保了只有等上一笔交易成功之后,才开始下一笔交易,从而有效地防止了重放攻击导致的双花问题。
nonce的特殊情况从合约内部调用其他合约属于内部调用,此时nonce值是不发生改变的。这是因为内部调用并不涉及从外部账户发送新的交易到区块链上。如果一个账户长时间未进行交易,其nonce值可能会落后于其他频繁交易的账户。但这并不影响其后续交易的发送,因为只要按照正确的nonce顺序发送交易,交易仍然可以被成功处理。nonce的示例假设一个账户的初始nonce值为0,并且该账户发送了两笔交易:
第一笔交易的nonce值为0,发送成功后,该账户的nonce值更新为1。第二笔交易的nonce值必须为1(因为第一笔交易的nonce值为0),发送成功后,该账户的nonce值更新为2。如果此时尝试发送一个nonce值为0的交易,该交易会被直接拒绝,因为已经有一个nonce值为0的交易被发送并处理了。同样地,如果尝试发送一个nonce值为3的交易(而当前nonce值为2),该交易会处于pending状态,直到发送一个nonce值为2的交易并处理完毕为止。
综上所述,nonce在以太坊中扮演着至关重要的角色,它不仅是维护交易顺序的关键机制,还是防止“双花”问题的重要保障。通过合理使用nonce值,可以确保交易的顺序性和安全性。