# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hg.network/dapp-kai-fa-jiao-cheng/dapp-kai-fa-ji-chu-ren-shi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
