智能合约就是一段代码,一些人为制定的规则,运行在区块链中,参与治理的人必须遵从这些规则才能正常的使用下去。它开启了区块链的许多的实际应用场景,许多社会问题、需求、痛点都能通过区块链进行解决。不同行业、种类的规则都可以写进智能合约里面。
智能合约结合区块链,让其不可篡改、去中心化的特性真正发挥出价值,人们可以利用它开发出各种各样解决行业痛点的软件、Dapp。
合约方法
在这里constant相当于他声明这个局部变量不能更改,但是他并没有实际作用(实际就只是警示作用)
地址adress
- address.balance 账户余额
- adress.transfer(value) 返回调用者
- adress.send(value) 返回调用状态
- adress.call,adress.callcode and adress.delegatecall 用在智能合约与智能合约彼此相互调用
ether单位
- wei
- szabo = 10^12wei
- finney=10^15wei
- ether=10^18wei
块
- block.blockhash(uint blockNumber) returns(bytes32)
- block.coinbase(adress) 谁挖到这个block
- block.difficulty(uint) 块难度
- block.gaslimit(uint) gas限制(最多)
- block.number(uint) 块的序号
- block.timestamp(uint) 块创建时间
- now
单员工薪酬智能合约实例
pragma solidity ^0.4.22;
contract Pay{
uint salary = 1 ether; //工资总额
address frank =0x57ec6c8f13c46b43dcd28c83753dec9224d23ef2; //frank的账户地址
uint constant payDuration = 30 days; //发放薪资的周期
uint lastPayday = now;
function addFund() payable returns(uint){
return this.balance; //返回余额
}
function colculateRunway() returns(uint){
return this.balance / salary; //返回余额能够发放工资的次数
}
function hasEnoughFund() returns(bool){
return this.colculateRunway() > 0; //限制能够发放薪资的次数大于0次
}
function getPaid(){
if(msg.sender != frank){
revert(); //如果合约调用者不是frank 那么直接抛出异常
}
错误检测
- assert(bool) 使用在程序运行时
- require(bool) 使用在程序输入时