以太坊calldata隐藏实际data
『壹』 区块链技术有哪些应用
基于以太坊开发以太猫,这个算不算应用,玩的有点意思,还有网易星球。用于溯源,抢购过中企通宝区块链做的橙链,就是在橙子上用于区块链溯源记录。
『贰』 如何用web3.js提供的javascript api来调用合约
js的原生api加上浏览器暴漏出来的api能上万都困难,更别说几十万,如果你说的是调用桌面操作系统的api的话可以用nodejs,如果你说的是调用智能手机的操作系统api的话可以让webview控件暴漏的对象封装系统api,或者用phoneGap之类的东西打包你的app的话可以调用它提供的api具体用法查相应的文档.
NativeScript的工作原理:用JavaScript调用原生API实现跨平台
NativeScript是最近推出的一个跨平台解决方案,可以让你可以用JavaScript来直接写Android、iOS本地应用程序,未来还即将扩展到Windows平台。是最近比较受关注的项目。它与 nw (原名node-webkit ,用Web写winodw/linux桌面应用)和 phonegap内嵌webview写APP的实现方式有着本质的不同,它直接用JavaScript调用系统原生API,因而有一些原生应用的特点。
『叁』 我想参与数字货币的交易,有什么好的建议吗
如果想要参与数字货币的交易,必须要了解数字货币生态系统。
数字货币交易所
可以说,数字货币交易所是整个行业最重要的组成部分。数字货币交易所为投资者和交易者提供了买卖数字货币的资金通道,同时,交易所的交易活动决定了当前许多数字资产的价格。
据CoinMarketCap显示,数字货币交易所的资金流动巨大,前五名交易所的日均交易量超过30亿美元。
全球有数百个数字货币交易所,一些在全球范围内针对主流市场开展业务,而一些侧重于小众市场。
例如,AAX致力于为数字货币交易者和机构投资者提供服务,将数字货币世界与全球经济融合起来,并使用LSEG Technology支持的撮合引擎提供无以伦比的一流技术能力。
许多替代币在推出后不久,就成功占据了一定的市场份额。数字货币交易所的共同点,在于他们共同为这些替代币提供了发展土壤。
数字货币不再仅限于比特币。其他数字货币资产,例如ETH,XRP,BCH,USDT,LTC,EOS,XTZ等,都在许多数字货币交易商的投资组合和多元化策略中占有一席之地。
目前,数字货币交易与外汇交易有很多相似之处,因为外汇中使用的基本原理,工具,指标和策略也适用于数字货币交易。AAX学院的数字货币交易板块,深入广泛地讨论了这些主题。
区块链协议
区块链是让数字货币成为可能的底层技术。区块链协议多种多样,每种协议的技术特性和优缺点都略有不同。
例如,比特币区块链依靠挖矿和POW (工作量证明) 机制来处理交易,而另一个区块链可能无需挖矿而采用DPOS (委托权益证明) 机制。 除了比特币区块链之外,其他值得注意的协议还有ETH,Hyperledger,EOS,XLM,IOST,KIN,TRX和STEEM。在这些区块链协议中,在推动整个数字货币生态系统的快速创新方面,ETH(以太坊)值得称赞。
以太坊平台由Vitalik Buterin创建,标志着开发人员使用自带的编程语言Solidity,能够更好地利用该平台的资源。以太坊让区块链技术风靡一时,在智能合约和自定义通证的基础上,创造了创新型去中心化应用程序的新世界。目前大多数替代币都基于以太坊的ERC20标准。
区中心化金融运动,或简称DeFi,也基本上建立在以太坊区块链协议的基础上。
金融服务
对于传统金融中存在的每项服务,基于以太坊的DeFi应用都有相应的替代版本供所有人访问。 DeFi应用程序允许用户创建稳定币,借出资金并赚取利息,发送和接收付款,获得贷款,进行交易,在预测市场上持仓,进入房地产领域等等。 智能合约是使去中心化服务成为可能的关键。一旦满足某些条件,智能合约就会自动执行预先约定的活动。
同时,传统金融也开始转向为数字货币领域提供新的定制服务。目前,有些基金经理为投资者提供了将数字货币加入投资组合的选项,托管方为在数字货币上投入大量资金的投资者提供安全服务,而主流媒体(如彭博社)上的许多分析师也对数字货币产生了浓厚兴趣。
数字货币硬件
对于喜欢亲手打造安全措施的人来说,庞大的数字货币硬件市场可以为专业交易员和长期持有者(HODLer)提供所需的工具。Trezor和Ledger是最具盛名的硬件钱包,两者本质上为数字货币交易者提供了相同的价值,即更加安全的存储数字货币的方式。
当然,存储在硬件钱包中的数字货币无法在市场上进行交易。因此,数字货币交易者通常根据自身的交易风格偏好,按照一定的比率在硬件钱包和交易所之间进行资金分配。
数据聚合商和区块链分析
跨区块链的活动如此之多,因此产生了大量数据,也催生了子行业,即数据聚合商和区块链分析行业的涌现。 CoinMarketCap这样的公司,是快速检查数字货币和交易所数据的首选来源。他们收集交易量,流动性,市值,价格走势,流通量和整个行业的统计数据,例如货币总数,市场数量,行业市值和BTC市值占比。
对区块链分析更感兴趣的人,可以在Blocktivity这样的网站中找到所需数据。在这里,你可以查看每个单独的区块链协议的相关数据,包括最近24小时的操作数量,最近7天的平均操作数量,市值以及CUI指数,即当前区块链协议实际用量之后的剩余可用容量。总而言之,这些网站可以提供针对区块链行业的宝贵见解。
例如,以太坊在过去7天的平均操作数量为66.7万次,CUI略高于50%,而EOS在同一时间范围内的平均操作数量为6,300万次,CUI略低于50%。技术上来说,EOS协议的性能比以太坊更为强大。但是,这也无法阻止以太坊占据最主流币种总市值的70%。
数字货币媒体和会议
当今世界,几乎每个人都是内容的发布者。没有自媒体行业,如此规模庞大的行业将不复存在。数字货币催生了广泛的媒体格局,涵盖了针对货币,公链和代码的新闻媒体,KOL和相关会议。
数字货币头部媒体包括Coindesk,Cointelegraph,Bitcoin Magazine,Decrypt,CCN,Bitcoinist,NewsBTC等。有些KOLs同样声名赫赫,有时受众甚至超过了新闻媒体。
YouTube的名人,如DataDash,Dollar Vigilante,Altcoin Buzz,Ivan on Tech和Boxmining,都有200K至300K的订阅者。在数字货币交易领域,CryptoTwitter的顶流明星包括VentureCoinist,CryptoCred和CryptoDonAlt,其粉丝数分别为211K,140K和120K。
如果你想要与公司和人员进行面对面的交流,那么数字货币和区块链会议则不容错过。全世界每年都有许多会议面向投资者,区块链达人,初创公司,机构融资,货币或协议的相关社区。仅在2019年,我们就赞助并参加了伦敦的Blockchain Live,新加坡的CoinMarketCap主办的The Capital峰会以及上海世界移动大会。我们与其他数字货币公司和主要金融机构进行了激动人心的会晤,并与来自不同司法管辖区的监管机构建立了联系。
数字货币监管
随着数字货币行业市场和受众的不断增长,大多数情况下,金融监管机构仍在开发用于保护投资者和消费者的相关框架。监管机构采取的方法可能大不相同,这对于跨多个司法管辖区运营的公司来说,无疑是一个挑战。
在2017年和2018年的ICO热潮中,许多项目在监管框架建立之前就已启动,而有些项目并不符合该管辖区的准则,在募资过程中就被中止。这一切都源于如何对数字资产进行分类,而关于分类的理解在不断的变化。目前,我们将数字资产区分为证券型代币和实用型代币。
在过去的一年中,随着Libra的提出,监管的推动力度也在加大。央行也在积极探索区块链技术对其政策和经济活动的意义,并不断发表报告。
数字货币生态系统迅猛发展
构成数字货币生态系统的这些组件,都在有条不紊的进行增长和发展,为日趋健全的行业贡献着力量。从2009年的小众兴趣到活跃的数字资产经济,数字货币已经走过漫漫长路。
但是,为了实现行业的发展和广泛参与,只有强大的生态系统是不够的。我们需要在数字货币和全球金融之间建立更好的联系。数字货币和传统金融结合的越好,新人就越容易了解数字货币生态系统。
对于每位新手来说,随着交易所,金融服务,媒体和监管机构逐步适应主流消费者的期望,数字货币行业将进一步发展,从而可能改善投资成果。
『肆』 Windows下VS2015编译以太坊源码cpp-ethereum失败
1.准备工作。windows64位系统,C盘预留一定空间,下载并安装vs2015(官方注明只支持VS2015,待验证),cmake我用的3.10.1,将系统语言调成非unicode语言,如英文(美国),否则最后编译时会有错误。
2.项目clone到本地,项目地址:
3.执行 submole updata --init。
4.将script目录下install_deps.bat拷贝至根目录并执行,该步骤会将hunter、boost、libjson等一系列下载至C盘,时间较长,请耐心等待。
5.控制台cd到项目所在目录并创建build子目录,
『伍』 以太国际空间谁知道怎么玩。EIS币怎么交易
现在我们大家都很关注关于以太坊方面的问题,那么关于以太币怎么交易?我想我们大家应该会很想了解一些内容,那么下面就让我们小编在这里就来为大家好好的介绍一下很多内容关于以太币怎么交易?以太坊的交易最直观解释:从外部账户发送到区块链上的另一个账户的消息和签名的数据包。
包含如下内容:
发送者的签名
接收的地址
转移的数字货币数量等内容
以太坊上的交易都是需要支付费用,和比特币以比特币来支付一定的交易费用不同,以太坊上固定了这个环节,那么这个间接理解是以太坊的一种安全防范错误,防止了大量的无意义的交易,保证一定的安全性,特别是智能合约的创建、执行、调用都需要消耗费用,那么也保证了整个系统的稳定性,防止了一些链上无意义的恶意行为。
交易手续费
以太坊的核心是EVM,以太坊虚拟机,那么在EVM中执行的字节码都是要支付费用。也就是经常看到的Gas、Gas limit、Gas Price这几个概念。
Gas:字面理解就是汽油,以太坊和日常的汽车一样需要Gas才能运行。Gas是一笔交易过程中计算消耗的基本单位。有一个列表可以直观看到在以太坊中操作的Gas消耗量:
操作Gas消耗具体内容
step1执行周期的默认费用。
stop0终止操作是免费的。
suicide0智能合约账户的内部数据存储空间,当合约账户调用suicide()方法时,该值将被置为null。
sha320加解密
sload20在固定的存储器中去获取
sstore100输入到固定的存储器中
balance20账户余额
create100创建合约
call20初始化一个只读调用
memory1扩充内存额外支付的费用
txdata5交易过程中数据或者编码的每一个字节的消耗
transaction500交易费用
contract creation53000homestead中目前从21000调整到53000
所以有些公司或者个人觉得区块链技术去中介化,不需要中心服务器,这种开发模式是比较便宜的,但是事实上区块链的开发不比之前的那些传统软件开发来的便宜。
Gas Price:字面理解汽油价格,这个就像你去加油站,95#汽油今天是什么价格。一个Gas Price就是单价,那么你的交易费用=Gas*Gas Price,然后以以太币来ether来支出。当然你觉得我不想支付费用,你可以设置Gas Price为0,但是选择权在矿工手中,矿工有权选择收纳交易和收取费用,那么最简单的想想很难让一个矿工去接收一个价格很低的交易吧。另外提一句,以太坊默认的Gas Price是1wei。
Gas Limit:字面理解就是Gas的限制,限制是必要的,没有限制就没有约束。这个Gas Limit是有两个意思的。首先针对单个交易,那么这个表示交易的发起者他愿意支付最多是多少Gas,这个交易发起者在发起交易的时候需要设置好。还有一个是针对区块的Gas Limit,一个单独的区块也有Gas的限制。
假设几个场景来说明Gas的使用:
用户设置Gas Limit,那么在交易过程中,如果你的实际消耗的Gas used
用户设置Gas Limit,那么交易过程中,如果你的实际消耗的Gas used > Gas Limit,那么矿工肯定发现你的Gas不足,这个交易就无法执行完成,这个之后会回滚到执行之前的状态,这个时候矿工会收取Gas Price*Gas Limit。
区块的Gas Limit,区块中有一个Gas上限,收纳的交易会出现不同的用户指定的Gas Limit。那么矿工就会根据区块限制的Gas Limit来选择,“合理”选择打包交易。
具体交易
以太坊上交易可以是简单的以太币的转移,同时也可以是智能合约的代码消息。列个表格看下交易的具体内容:
代码内容
from交易发起者的地址、不能为空,源头都没有不合理。
to交易接收者的地址(这个可以为空,空的时候就表示是一个合约的创建)
value转移的以太币数量
data数据字段。这个字段存在的时候表示的是,交易是一个创建或者是一个调用智能合约的交易
Gas Limit字面理解就是Gas的限制,限制是必要的,没有限制就没有约束。这个Gas Limit是有两个意思的。首先针对单个交易,那么这个表示交易的发起者他愿意支付最多是多少Gas,这个交易发起者在发起交易的时候需要设置好。还有一个是针对区块的Gas Limit,一个单独的区块也有Gas的限制。
Gas Price一个Gas Price就是单价,那么你的交易费用=Gas*Gas Price,然后以以太币来ether来支出。以太坊默认的Gas Price是1wei。
nonce用于区别用户发出交易的标识。
hash交易ID,是由上述的信息生成的一个hash值
r、s、v交易签名的三部分,交易发起者的私钥对hash签名生成。
交易分三种类型
转账:简单明了的以太坊上的以太币的转移,就和比特币类似,A向B转移一定数量的以太币。这种交易包含:交易发起者、接收者、value的数量,其余类似Gas Limit、hash、nonce都会默认生成。所以你会看到一段代码:
web3.eth.sendTransaction({ from: "交易发起者地址", to:“交易接收者地址”, value: 数量});
智能合约创建:创建智能合约就是把智能合约部署到区块链上,那么这个时候to是一个空的字段。data字段则是初始化合约的代码。所以看到代码:
web3.eth.sendTransaction({ from: "交易发起者地址", data: "contract binary code"});
智能合约执行:合约创建部署在区块链上,那么执行就是会加上to字段到要智能合约执行的地址,然后data字段来指定调用的方法和参数的传递,所以看到代码:
web3.eth.sendTransaction({ from: "交易发起者地址", to:“合约执行者地址”, data:“调用的方法和参数的传递”});
以上大致就是交易的类型。
交易的确认
和比特币一样,以太坊的交易需要后续区块确认后,节点同步后、才能确认。简单理解就是多挖出一些区块来,通过验证后这一笔交易才算确认,以太坊时常会出现拥堵的情况,所以有时候需要等待确认。
转账、合约交易流转
首先交易发起者A发起一笔转账交易,那么发送的格式如下:
代码具体内容
from交易发起者的地址
to交易接收者的地址
value转移的以太币数量
GasGas的量
Gas PriceGas的单价
data发送给接收者的消息
nonce交易编号
节点验证:以太坊网络中会有节点收到A发送出来的消息,那么会去检查这个消息格式时候有效,然后计算Gas Limit。这个时候回去验证A的以太坊余额,如果余额不足,那么就返回错误,不予处理。一旦A发送的消息通过了节点的验证,那么节点就会把这个交易放到交易存储池中。并广播到区块链网络。
矿工验证:那么写入区块链必须要矿工打包,矿工在接收到A发出的交易,会和其他交易一块打包,普通转账交易打包即可,那么合约调用的交易则需要在矿工本地的EVM上去执行调用的合约代码,代码执行过程中检查Gas的消耗。一旦Gas消耗完了,那么就回滚,如果Gas足够那么返回多余的Gas。并广播到区块链网络。
其余节点:重复节点验证步骤,然后合约也会在本地EVM上执行验证。通过验证后同步区块链。
首先还是发起者A发起一个创建智能合约的交易请求。格式如下:
代码具体内容
from交易发起者的地址
to0
value转移的以太币数量
GasGas的量
Gas PriceGas的单价
data合约代码
nonce交易编号
节点验证:
以太坊网络中会有节点收到A发送出来的消息,检查交易是否有效,格式是否正确,验证交易签名。计算Gas,确定下发起者的地址,然后查询A账户以太币的余额。如果余额不足,那么就返回错误,不予处理。一旦A发送的消息通过了节点的验证,那么节点就会把这个交易放到交易存储池中。并广播到区块链网络。
矿工验证:
矿工将交易打包,那么会根据交易费用和合约代码,来创建合约账户,在账户的空间中部署合约。这里说下合约地址(智能合约账户的地址是有发起者的地址和交易的随机数作为输入,然后通过加密算法生成)。交易确认后会把智能合约的地址返回给A。且广播到区块链网络。
其余节点:
重复节点验证步骤,验证区块,在节点的内存池中更新A的智能合约交易,同步区块链,且智能合约部署在自己本地的区块链中。
『陆』 QTUM-量子链是什么
.
投资比特币现在的收益也没有那么高啊。我所知道的这类理财产品都属于高利贷,年化率高于24%的一般都不被国家保护。我所知道的,月盈利30%的都是一些传销骗局,例如BBT造币机就是这样。
当然,也许你会反驳我,因为你确实获得了收益,但如果不让你尝到甜头,你会投资更多的资金吗,会去拉人头吗?这个可以去网络一下旁氏骗局。
『柒』 啥是分片技术
写在文前:视频版本和文字版本略有不同,想要看我深情并茂演绎,请看视频版本 (喵懂区块链22期|分片(Sharding):以太坊太慢,“盘”他!),思维逻辑怪,请看文案加长版。
最近以太坊由于君士坦丁堡升级(Constantinople)而出现了压倒性的积极走势,而以太坊的升级之路则犹如升级打怪一般,落入了rabbithole,谁也不知道这洞有多深。既然是“路漫漫其修远兮”,则把脚下的每一步走好走准,则成了至关重要的点。攻破这一难点之后,以太坊的下一技术难点---Sharding分片,则又被摆到了台面上。本期《喵懂区块链》会带大家走进让以太坊快起来的法宝--- Sharding分片。
什么是sharding分片?
分片技术其实并不是什么新概念,起初是针对大型中心数据库提出的优化方案,具体来说就是将大型数据库中的数据划按照某种规则分成很多数据分片(shard),再将这些数据分片分别存放在不同的服务器中,以减小每个服务器的数据访问压力,从而提高整个数据库系统的性能。
我们举一个通俗的小例子:
比如我们平时经常使用的美团,滴滴打车等软件,就可以按照“城市”来进行分片,由于不同城市的数据不需要互通,就可以将不同城市的数据存放在不同数据库中,这样既可以把数据库服务器部署到离对应城市最近的节点上,还可以提高访问速度,何乐而不为呢?!
从上面的例子中,我大家应该对分片的概念有了初步了解,那么对应到区块链场景中来说,分片又是怎么样的呢?
以以太坊分片为例,在原有的单链系统中,公链整体的性能取决于单个节点的性能,进行分片之后,每个节点只需要承当全网部分工作,各个分片并行工作,按照Vitalik的话来说,each shard is like a separate galaxy每个分片都像是独立的小宇宙,这样效率自然噌噌噌提升!原本以太坊链全网TPS约为20,现在若增加到100个分片,那么全网TPS可以提升至2000,同理,全网容量也将提升至原来的100倍。
“每个节点只需要承担全网部分工作”,这就会引出几大问题,1.怎么确定这个节点是负责哪个分片的工作?2.哪些交易应该归类到哪些分片当中去?3.每个节点是否只需要储存自己所在分片的交易信息(账本)?
根据以上问题的实现与否,我们可以将分片依次分为三种类型:网络分片,交易分片,状态分片。
网络分片:如何将全网节点划分到不同分片当中去。
交易分片:如何将全网交易划分到不同分片当中去。
状态分片:如何让各个节点只维护各自分片内的账本,但又不影响整个系统的安全性。
主链和分片链的区别和联系?
分片的类型我们已经明白了,那么主链(Main chain)和分片链(shard chain)有什么不同呢?
向左转|向右转
以太坊分片的实现是一个漫长的过程,就连Vitalik自己也说将会分阶段来逐步实现,分片到底能不能从理论走向实践,我们还是小小期待一下吧。
『捌』 如何创建和签署以太坊交易
交易
区块链交易的行为遵循不同的规则集
由于公共区块链分布式和无需许可的性质,任何人都可以签署交易并将其广播到网络。
根据区块链的不同,交易者将被收取一定的交易费用,交易费用取决于用户的需求而不是交易中资产的价值。
区块链交易无需任何中央机构的验证。仅需使用与其区块链相对应的数字签名算法(DSA)使用私钥对其进行签名。
一旦一笔交易被签名,广播到网络中并被挖掘到网络中成功的区块中,就无法恢复交易。
以太坊交易的数据结构:交易0.1个ETH
{
'nonce':'0x00', // 十进制:0
'gasLimit': '0x5208', //十进制: 21000
'gasPrice': '0x3b9aca00', //十进制1,000,000,000
'to': '' ,//发送地址
'value': '0x16345785d8a0000',//100000000000000000 ,10^17
'data': '0x', // 空数据的十进制表示
'chainId': 1 // 区块链网络ID
}这些数据与交易内容无关,与交易的执行方式有关,这是由于在以太坊中发送交易中,您必须定义一些其他参数来告诉矿工如何处理您的交易。交易数据结构有2个属性设计"gas": "gasPrice","gasLimit"。
"gasPrice": 单位为Gwei, 为 1/1000个eth,表示交易费用
"gasLimit": 交易允许使用的最大gas费用。
这2个值通常由钱包提供商自动填写。
除此之外还需要指定在哪个以太坊网络上执行交易(chainId): 1表示以太坊主网。
在开发时,通常会在本地以及测试网络上进行测试,通过测试网络发放的测试ETH进行交易以避免经济损失。在测试完成后再进入主网交易。
另外,如果需要提交一些其它数据,可以用"data"和"nonce"作为事务的一部分附加。
A nonce(仅使用1次的数字)是以太坊网络用于跟踪交易的数值,有助于避免网络中的双重支出以及重放攻击。
- const ethers = require('ethers')
- const signer = new ethers.Wallet('钱包地址')
- signer.signTransaction({
- 'nonce':'0x00', // 十进制:0
- 'gasLimit': '0x5208', //十进制: 21000
- 'gasPrice': '0x3b9aca00', //十进制1,000,000,000
- 'to': '' ,//发送地址
- 'value': '0x16345785d8a0000',//100000000000000000 ,10^17
- 'data': '0x', // 空数据的十进制表示
- 'chainId': 1 // 区块链网络ID
- })
- .then(console.log)
以太坊交易结构
以太坊交易签名
以太坊交易会涉及ECDSA算法,以Javascript代码为例,使用流行的ethers.js来调用ECDSA算法进行交易签名。
可以使用在线使用程序Composer将已签名的交易传递到以太坊网络。这种做法被称为”离线签名“。离线签名对于诸如状态通道之类的应用程序特别有用,这些通道是跟踪两个帐户之间余额的智能合约,并且在提交已签名的交易后就可以转移资金。脱机签名也是去中心化交易所(DEXes)中的一种常见做法。
也可以使用在线钱包通过以太坊账户创建签名验证和广播。
使用Portis,您可以签署交易以与加油站网络(GSN)进行交互。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
『玖』 GSN这个项目来自哪里
什么是GSN
对以太坊来说,转账、发Token、调用合约等交易都是需要支付手续费Gas,不能白piao,Gas是保障以太坊网络稳定运行的重要手段。
然而在现实生活中,为了推广产品,免费甚至补贴用户是互联网企业惯用的获客手段,普罗大众早已被这些企业教育的习惯了白P。
如果企业开发了一款Dapp,想要推广到市场,告诉用户“我们这是基于区块链的,你要想使用得先去买得以太币,哦,现在一个以太币要3000多人民币!”,估计大多数人直接转身离开,剩下得大多数直接跳脚骂娘了,只有很少数极客可能会去体验下。这也是Dapp很难被大众接受的一个重要原因。
为了解决这个问题,GSN应运而出!
GSN的全称是Gas Station Network,翻译过来就是加油站网络。GSN将本该由用户支付的Gas转嫁到了其它愿意为用户买单的人身上(一般为Dapp开发者),并且能够保证交易的真实性。
image.png
GSN目前有两个版本,v1和v2,在实现和流程上有所不同。本篇内容是基于v2版本整理。
二、相关角色
2.1 客户端-Client
客户端也就是各种Dapp,是GSN架构的最上层。客户端负责发起对原交易进行签名,并将签名后的原交易发送到中继服务器中。
2.2 中继服务器-RealServer
中继服务器主要用来处理用户的元交易请求,主要的功能包括:
通过调用中继路由(RelayHub)合约,判断付款人(Paymaster)是否允许为该笔交易支付手续费,并且有足够的以太币
中继服务器将交易发送到链上
对于中继服务器,多个客户端可以使用一个,也可以一个客户端对应一个。
2.3 付款人-Paymaster
付款人交易Gas的实际支付者。付款人是一个智能合约,该合约最重要的是交易过滤器” acceptRelayedCall“,决定了可以为哪些交易支付费用。
常用的过滤器包括:
白名单
令牌认证
对特定方法放行
链下委托授权
2.4 中继路由-RelayHub
中继路由本身是一份智能合约,提供的功能包括:
维护一份中继器列表,供客户端查询
提供RelayHub.balances[recipient]方法,供中继服务器在支付Gas前检查Dapp开发者已存入足够的ETH
中继路由合约可以自行部署,也可以直接使用GSN提供的。自行部署的RelayHub无法共享已存在的中继器。
以太坊主网上的RelayHub合约地址:
2.5 中继接收合约-RelayRecipient
每个支持GSN的DApp都需要继承RelayRecipient,并提供与RelayHub通信的接口。在部署Dapp合约时,需要初始化RelayHub的地址。
需要注意的是,在继承RelayRecipient合约后,使用_msgSender()替代msg.sender获取元交易的用户信息。