智能合约入门
Posted 小白求带528
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能合约入门相关的知识,希望对你有一定的参考价值。
solidity简介
- Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。
- 以太坊不一样,可以认为是一个运行在区块链上的虚拟机。以太坊区块链上的虚拟机叫做 EVM ,EVM 就是 Solidity 语言的运行环境。以太坊号称世界计算机,所有的部署到以太坊之上的合约代码,网络上所有的计算机都会各自运算一遍,这样就保证了计算过程是公开可信的
- 代码写好之后,需要先编译,然后部署到区块链网络上运行一下。各大区块链项目,基本上都有自己的测试链,测试链上部署和执行代码都不用真的花钱,只需要申请一些测试链代币就可以了
- 代码部署到区块链上之后,我们就可以和智能合约进行交互了。但是能够访问的接口不再是我们熟悉的 HTTP API 了,而是叫 ABI ,也就是“应用二进制接口”,所以交互方式也有一定区别。好在这个咱们开发者完全不用担心,各个平台都发布了相应的库来支持交互。比如我们用来跟智能合约交互的前端是一个 Web App ,这样就可以导入对应的 JS 版本的库来实现交互了
- 智能合约的编译后,部署到区块链上,成为运行在链上的实例。然后就可以通过前端 App 来通过 Web3.js 或者 nervos.js 这样的库,来调用合约的各项功能,进行各种读写操作了。合约加上前端 App ,就构成了一个 DApp
- 合约的代码具有什么能力:读取交易数据。读取或写入合约自己的存储空间。读取环境变量(块高,哈希值,gas)
向另一个合约发送一个“内部交易”
EVM虚拟机
- 业务流程如下图
- 输入一笔交易,内部会转换成一个Message对象,传入EVM执行。
如果是一笔普通转账交易,那么直接修改StateDB中对应的账户余额即可。如果是智能合约的创建或者调用,则通过EVM中的解释器加载和执行字节码,执行过程中可能会查询或者修改StateDB
- 如果你的交易不带额外数据(Payload),比如普通转账,那么需要收取21000的油费。
如果你的交易携带额外数据,那么这部分数据也是需要收费的,具体来说是按字节收费:字节为0的收4块,字节不为0收68块,所以你会看到很多做合约优化的,目的就是减少数据中不为0的字节数量,从而降低油费gas消耗。计算方法:
参数解析
- 调用合约函数会需要input数据来区分,
- Input数据通常分为两个部分:
前面4个字节被称为“4-byte signature”,是某个函数签名的Keccak哈希值的前4个字节,作为该函数的唯一标识。(可以在该网站查询目前所有的函数签名)
后面跟的就是调用该函数需要提供的参数了,长度不定。例如一个数据是0x87db03b70000000000000000000000000000000000000000000000000000000000000001
以上是关于智能合约入门的主要内容,如果未能解决你的问题,请参考以下文章