以下不一定全,准确率99%
1字节等于2gas
1、变量类型
是否是真 bool
数字类型:
int/uint:有符号和无符号整形 默认256;
int8到uint256;
地址类型:
address 20字节长度
属性方法:
send
call
callcode
selfdestruct
delegatecall
字节类型
byte;
bytes; 1.2.3.4.5.6-256,访问方式bytes[0]
字节属性:
length;长度
数组类型:
uint[2] public u;
长度length;
uint[2][2] public c;
字符串类型 (手续费比较贵 尴尬。。)
string
其他操作:基本无
数据类型
enums 枚举
structs 结构
默认可使用构造函数加属性参数进行传递;
mappings 映射
mappings(uint => address) public addsIndex; map数组
delete 删除;
初始化属性变量;
每个变量都默认有a()的读取方式,a(b)的肤质方式。
2、关键字
属性关键字
public;可见
方法关键字
payable 修饰方法可接受eth
3、操作
<=, <, ==, !=, >= 和 >
比较: <=, <, ==, !=, >=, > (返回 bool)
位运算: &, |, ^ (按位异或), ~ (按位取反)
算术运算 +, -,*, /, % (取余数), ** (乘方), << (左移), >> (右移)
左移运算符 x << y 和 x * 2**y 是相等的,x >> y 和 x / 2**y是相等的。
4、系统函数
block.blockhash(uint blockNumber) returns (bytes32):给定块的散列 - 仅适用于256个最新块,不包括当前块
block.coinbase(address):当前交易块是那个矿工挖出的 矿工地址
block.difficulty(uint):当前区块困难
block.gaslimit(uint):当前阻止gaslimit
block.number(uint):当前程序段号
block.timestamp(uint):当前块时间戳记,因为unix时期以来的秒数
msg.data(bytes):完成calldata
msg.gas(uint):剩余气体
msg.sender(address):当前交易触发的用户地址
msg.sig(bytes4):calldata的前四个字节(即函数标识符)
msg.value(uint):eth转换为 wei的数量 与消息一起发送的wei的数量
now(uint):当前块时间戳(别名为block.timestamp)
tx.gasprice(uint):交易的天然气价格
tx.origin(address):交易的发送者(完整的呼叫链)
5、合约间调用
send
call
callcode
delegatecall
6、event事件
主要用于日志打印
event 函数名称(参数1,参数2);
7、方法
function name(参数){public|private|internal|external} [constant] [payable] returns(return types){}
external:可以呗其他合约调用,但是再自身合约内不能调用,需要this.f()这样使用;
public 既可以呗其他合约调用,也可以内部直接使用
internal 只能再合约和其子类合约中使用
private 只能再自己的合约内部使用,子类中也不能使用。
pure 此函数数据不会写入区块链,甚至不需要读取区块链数据
view 次函数数据不会写入区块链
constant
payable 此方法可以接收eth
匿名函数
定义方式只需要把函数名去掉
合约不存在是被调用,接收eth时被调用;
匿名函数可以在不调用方法的情况下收到eth
修改器
modifiers方法名字
{
if(1=1)
{
throw;
}else
{
_;//固定写法
}
}
调用时机
function a() 修改器名称
{
}
8、api
keccak256
9、继承
使用is去继承一个合约。子类可以访问父类的除了private限制的属性或方法
包括internal方法和变量,注意不可以使用this来访问。
构造函数需
F
{
}
F1
{
unit u;
F1(uint _u)
{
}
}
B is F,F1(20)
{
F1.u;
}
10、销毁
selfdestruct(address _ad)
销毁当前合约,并把当前合约余额发送到指定地址
11、事件 event
主要用于打印日志
12、发送eth
合约给用户发送eth
msg.sender.send(数量) return bool;
msg.value //用户发送到合约的eth
owner.send(msg.value);//向合约拥有者转移eth
13、address的call方法
send 已经不可用 transfer 发送eth
call 合约间调用方式;
add.call(bytes4(keccak256("fun(uint256,uint256)")),2,2);
调用add合约内的fun函数,此函数有两个uint参数,参数传值 2,2
会操作修改fun合约内的缓存值
callcode
delegatecall
add.delegatecall(bytes4(keccak256("fun(uint256,uint256)")),2,2);
调用add合约内的fun函数,此函数有两个uint参数,参数传值 1,2
不会操作修改fun合约内的缓存值,若有操作则
13、单位
1eth = 18wei
1finney=15wei
1szabo =12wei
1gwei = 9wei
1lovelace = 6wei
1kwei = 3wei
1wei =1wei
14、库
library
using
bessie love erick
紧急需要联系