ETH 003 以太坊虚拟机介绍
2018-12-01 本文已影响0人
三文鱼的一生
3.1 一个入门的事例
pragma solidity ^0.5.0;
contract Storage{
mapping(uint => string) public storedData;
//内存中的value数据拷贝到存储中
function addOne(uint key, string memory value) public {
storedData[key] = value;
}
function get(uint key) public view returns(string memory) {
return storedData[key];
}
}
事例里面定义了一个存储的合约,可以存储Key-Value的数据。 addOne函数会触发数据存储。
3.2 以太坊虚拟机
以太坊虚拟机是以太坊项目中运行智能合约的运行环境。以太坊虚拟机是一个完全隔绝外界通讯的沙盒。 在以太坊中运行的智能合约不允许访问外部网络,外部文件系统,其他进行。 智能合约之间的访问也是受限制的。
3.3 账号
以太坊中账号分为外部账号和合约账号两种。合约账号由公私钥控制,合约账号是由合约中的代码控制。
合约账号的地址由合约发起方的地址和该地址的nonce(可以理解为版本号)决定。
外部地址是由公钥经过换算得到。
3.4 交易
交易是从一个发起账号到目标账号的信息传递,如果发起账号携带输出数据的话,则会触发目标账号相应的代码。
外部账号之间的转账 合约调用3.5 GAS
在以太坊的体系里面定义了一组行为,这些行为都需要消耗能量。我们将其称为GAS。其目的是无限制的循环调用。能量的提供方是交易的创建者,执行后剩下的能量,将退还给提供方。
GAS包括两个总要的概念:大小和定价,前者规定了和限制了“行为”的执行数量,或者规定了每个GAS的价格。 这两个数值会直接影响到你发起的交易被网络接受的速度。
3.6 指令集
以太坊中定义的操作行为链接如下:
https://github.com/ethereum/go-ethereum/blob/master/core/vm/opcodes.go