首页 > 其他分享 >02 ETH-账户

02 ETH-账户

时间:2023-05-02 14:44:57浏览次数:33  
标签:02 nonce 账户 比特 attack ETH 合约 交易

02 ETH-账户

目录

比特币的账户资产,根据 UTXO 中的信息来进行推算(基于交易的模式,不是基于账户的模式)。

好处:隐私保护比较好。(本人有多少个账户信息,可能自己都说不清楚)

缺点:使用上跟日常体验不太一样。每个币要说明来源;同时,每次交易必须把所有币花完。

很多比特币钱包可以自动生成接受余额的地址。每次交易换一个新地址。有利于隐私保护。


以太坊:account-based ledger

相似于银行账户的形式,有显示的余额的概念。不用说明币的来源,所以也不需要交易中的hash指针。

好处:比特币面临的主要挑战就是double spending attack。以太坊的基于账户的方式,对于double spending attack,有天然的防御作用(你想花钱,我把你钱在扣一次就完事了)。

那有没有什么弱点呢?

replay attack,重返攻击(比如:A—>B 10个ETH,B有恶意,B把交易在网上重新广播一遍,A的钱扣了两次。)

double spending attack 与 replay attack 相对称,double spending attack 是花钱的人不诚实,花过的钱想再花一次;replay attack 是收钱的人不诚实,别人已经转过钱,想要再转一边。

比特币中有没有可能出现重放攻击?

不可能。因为是很明显的double spending attack。


以太坊中如何解决重放攻击?

很简单,加一个nonce,记录一下这个账户有史以来一共发布过多少个交易。转账的时候,nonce要成为交易内容的一部分,都是收到发布交易者签名的保护。(因为有签名的保护,所以nonce的值,别人改不了)

系统中的全节点维护账户的状态,不光是维护账户的余额,还要维护nonce的值,nonce一开始都是0。


假设一个账户的nonce=20,执行了nonce=21的交易,全节点会校验签名,同时修改自己的维护的该账户的nonce值,使得nonce=21,如果发生重放攻击,全节点发现自己的nonce=21,说明该交易已经执行过了,就不会再执行一遍了。


以太坊账户:

外部账户(externally owned account):

类似于比特币账户,用公私钥可控制。外部账户有账户余额,还有nonce。(其实nonce 应该叫做 count更好)

合约账户(smart contract account):

合约账户不是通过公私钥对来控制,合约账户除了有balance和nonce(一个合约可以调用另外一个合约,所以同样需要nonce值,记录调用的次数,但是,合约账户不能主动发起一个交易,所有的交易只能由外部账户发起。外部账户调用合约账户,该合约账户发送msg调用另外一个合约,这是可以的)之外,合约账户还具有code 和 storage。

创建合约的时候,会返回一个合约地址,知道合约的地址,就可以调用合约,调用过程中合约状态会发生变化,code不会变,storage会变。


问题:为什么要设计这样一种新的账户模型?不用比特币已有的代码,另做一套?

Vitalik(19岁小孩)。

比特币地址讲究匿名性,建议每交易一次换一个地址;而对于合约来说,要求参与者有比较稳定的身份。


有人建议用智能合约实现金融衍生品(financial derivative),比如:期权、期货等。


如果你有隐私保护的需要,也可以创建不同的账户,进行不同的交易。

标签:02,nonce,账户,比特,attack,ETH,合约,交易
From: https://www.cnblogs.com/yangyi215/p/17367674.html

相关文章

  • 03 ETH-状态树
    03ETH-状态树目录03ETH-状态树地址到状态(balance、nonce、code、storage)的映射。以太坊地址一般160bits,一般表示为40个16进制的数。那么如何设计映射?像是key:valuepair?那么,能不能只用一个hash表来实现?(如果不考虑hash碰撞的话),那这样是不是太简单了?用hash表的话,如果需要提......
  • 2、go程序接入prometheus
    参考:https://prometheus.io/docs/guides/go-application/go默认基础指标packagemainimport( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp")funcmain(){ http.Handle("/metrics",promhttp.Handler()) http.......
  • 2023湖北CCPC省赛 蒻蒟的部分题解
    题目地址C.DarknessI题意:有一个n*n的方格,最开始全是白色,如果白色周围4格有两个黑色格子,1秒后这个白色格子会变成黑色,问如果要使全部格子都变为黑色,最开始最少需要涂黑几个格子Solution对于两个黑色格子,只有当满足\[|x_1-x_2|+|y_1-y_2|≤2\]才能涂黑以这两个格子为顶点的矩......
  • 02 BTC-数据结构
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click02BTC-数据结构目录02BTC-数据结构hashpointerMerkletreehashpointer:不仅可以找到前区块的位置,还能防止前区块是否被篡改。Blockchainisal......
  • 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
    补题链接:https://codeforces.com/gym/104337原文链接:https://www.eriktse.com/algorithm/1136.htmlM.DifferentBilling签到题,写几个柿子然后枚举B或C即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){ ios::sync_with_stdio(......
  • CSP2022-06
    第一题 水题,没啥好说的#include<iostream>#include<cmath>usingnamespacestd;constintN=1e6;doublea[N];intmain(){intn;cin>>n;doublesum=0;for(inti=0;i<n;i++){cin>>a[i];......
  • 2023-05-02:如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。 给你一
    2023-05-02:如果一个正整数每一个数位都是互不相同的,我们称它是特殊整数。给你一个正整数n,请你返回区间[1,n]之间特殊整数的数目。输入:n=20。输出:19。答案2023-05-02:可以通过数字组合和状态压缩的动态规划算法来解决。具体过程如下:1.对于给定的正整数n,求出其位数......
  • 2202年了,“小样本”还值得卷吗?
    文|Severus从一个应用实验引发的思考。大家好,我是Severus,一个在某厂做中文自然语言理解的老程序员。这个主题,源自于我之前在公司内做的一次技术分享。承接上一篇文章(格局打开,带你解锁prompt的花式用法),我想要继续分享一下,我们后续尝试的实验及分析,以及我对小样本的看法。简单回......
  • 02 Docker核心技术
    第二章:Docker核心技术目录第二章:Docker核心技术一、Docker镜像管理1镜像简介2搜索、查看、获取3重命名、删除4镜像导入、导出5镜像历史、详细信息、创建6小结二、Docker容器管理1容器简介2容器查看、创建、启动3暂停、取消暂停、重启4容器关闭、终止、删除5进入、退出......
  • MFC-GetHeaderCtrl获取列头指针
     CHeaderCtrl*phead=mylist4.GetHeaderCtrl();   ......