DApp开发基础认识
本教程是技术大牛 luofei614 的DApp开发学习笔记,编成教程分享给开发者。
0. 基础认识
以太坊是什么?
以太坊被称为“世界计算机”, 全世界上千个节点, 具备“图灵完备”的特性,可以永久运行下去。 以太坊可以看作是“全球共享的不可篡改的单线程的事务性数据库” 。
不可篡改性
基于区块链特性,上千个节点共同确认,被记录到链上的信息将不可篡改,使得价值可以在互联网上传播。
单线程性
不会出现双花,在同时发出的交易中,必然会有一个交易会失败, 每次交易会有个nonce参数来避免重复交流。
事务性
每次交易出现异常,会回滚到初始状态, 即使一次交易执行了多个合约,前面的合约执行没有异常,后面合约有异常也会让前面的合约操作回滚。
钱包是什么?
钱包是管理私钥的,并没有存数字货币,数字货币是存在区块链上的, 私钥是最重要的, 私钥可以生成公钥,公钥可以生产账号地址。 Dapp开发会和钱包交互,Dapp并不会自己拿用户的私钥做加密操作,而是Dapp调用钱包,钱包加密后返回给Dapp。
智能合约的机制
智能合约也是一个以太坊账号,这个账号只有账户地址,没有私钥。
创建智能合约实际是向地址为0的账号发起一次交易。 交易中data参数是合约的二进制代码数据。 交易完成后会返回智能合约地址。
调用智能合约的方法实际是向智能合约地址发起交易。交易中data参数告诉了以太坊EVM要执行什么函数和函数的传参。
交易过程传参。
nonce: 一个序列号编码,以账号的交易数作为这个值,是为了防止重放攻击。 以太坊是用交易随机数nonce按顺序确认的, nonce是交易账号的交易量,每次唯一,递增。
gas price : gas 是交易的燃料,燃料必须用以太坊购买,gas price定义了愿意支付的gas单价, 价格越高会执行越快,平均价格是节点决定的, 他的单位是wei, 1ETH=10**18wei 。 之所以有gas是为了防止DDOS攻击。让每次交易都是有成本的。
gas limit: 交易发起者最多支付多少gas, 如果到达这个数没有完成交易,会回滚,但消耗的gas不会返回。 汇款交易的gas是固定的21000个, 但是智能合约执行不是固定的。
value : 往交易地址发送的以太坊数量。 如果给0地址发送带value不带data的数据时,实际是摧毁币。
data : 附在交易的可编程的数据, 智能合约的创建和调用会用到这个data参数。
v,r,s : 签名相关的三个字段。 签名中会将链ID(chain_id)作为带入到签名,为了防止跨链重放攻击。 以太主网链ID是1 , Ropsten测试网链ID是3 , 火币正式链ID是128, 火币测试链ID是256,币安ID是56, 本地测试网ID是1337
Last updated