# 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
