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
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";

 

 

 

 
posted @   bfpiaoran  阅读(315)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示