Solidity 智能合约入门(二)----------基础语法
address 以太坊地址的长度,20个字节
int/uint 变长的有符号或无符号整型。支持以8递增,uint8到uint256。uint 默认为uint256。
bool 布尔型
mapping 键值对映射关系,如mapping(address => uint) 类似 key value
fixed/ufied 定点数?
string 字符串
byte/byte32 字节 数组
struct 结构体 类似字典?
struct test{ address addr unit amount }
public、private、internal external 四种访问权限
- 1.函数默认声明为public,即可以以internal方式调用,也可以通过external方式调用。可以理解为能够被内部合约访问和外部合约访问。
- 2.Internal声明的只允许通过internal方式调用,不能被外部合约。而external能够被外部合约访问。
- 3.private和internal类似,都不能被外部合约访问,唯一的不同是private函数不能被子类调用,而internal可以。
pure 返回非变量
view constant 返回全局变量
pragma solidity ^0.8.7; //指定版本 contract Testcoin //合约名 { uint storedData; function get() public view returns (uint) { return storedData; } }
constructor 构造函数修饰符
看起来还有个装饰器的语法的语法 用于modifier 关键字
下面写个无限增发的 测试
pragma solidity ^0.4.21;       //指定版本
contract Ceshicoin                //合约名
{
    uint storedData; 
    address public sender;
    mapping (address => uint) public balances;
    event Sent(address from, address to, uint amount);
    constructor init(){
        sender = 0x6526b6b3B454b04E5F340d8501F70ebB82201817;  // 初始化 设置合约创建者地址
    }
    modifier checkowner(){        // modifier 装饰器关键字 
        if(msg.sender!=sender) return;   // 直接return
        _;
    }
    function adminsend(address receiver, uint amount) public checkowner {   // set之前先调用checkowner方法
        balances[receiver] += amount;
    }
    function send(address receiver, uint amount) public {
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Sent(msg.sender, receiver, amount);
    }
}
初始化没搞懂。。。
创建完先调用下 init方法
之后address就被设置成内置地址 只有内置地址才可以调用 adminsend方法

 无限增发
 
require
类似于 try if

constructor  构造函数关键字 在合约创建时运行
event  事件是以太坊虚拟机(EVM)日志功能中提供的一组方便的接口。当事件被触发时,它们会将参数保存到交易日志中——区块链中一种特殊的数据结构。这些日志与合约地址相关联,并且会被打包进区块中,因此可以被永久访问(不过 Serenity 版本或许会有所改变)。注意,日志和事件的数据是不能被合约访问的,即便是创建它们的合约也不行(不然常规的数据存储就没意义了)
msg.sender
msg.sender 是 solidity 中的一个全局变量,他表示的是当前调用者(或智能合约)的地址
 msg.value 交易转入本币的数量
now  交易打包进块链的时间戳
blackhash 返回区块的hash
block.number 打包该区块的高度
address.balance 给定地址本币数量
 transfer  代表把eth转到合约账户
address.call 调用指定地址合约的方法
selfdestruct 自毁
继承(Inheritance)
当代码很长的时候我们可以把它们拆分成不同的合约,通过继承来获得其他合约的功能
contract welcome { function hi() public returns (string) { return "hi!"; } } contract welcome2 is welcome { function hello() public returns (string) { return "hello"; } }
引入(Import)
solidity 也支持 import(solidity 文件后缀是 sol) import "./sayhello.sol";
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号