Solidity:源文件结构

Solidity:源文件结构

SPDX License Identifier

如果源代码可用,则可以更好地建立对智能合约的信任。由于提供源代码总是涉及版权方面的法律问题,Solidity编译器鼓励使用机器可读的SPDX License Identifier。每个源文件都应以一条注释开头,说明其许可证:

// SPDX-License-Identifier: MIT

编译器不会验证该许可证是否属于SPDX允许的列表的一部分,但它会在:ref:bytecode metadata<metadata>

如果您不想指定许可证,或者源代码不是开源的,请使用特殊值UNLICENSED。

当然,提供此评论并不能免除您与许可相关的其他义务,比如必须在每个源文件或原始版权所有者中提及特定的许可头。

编译器可以在文件级别的文件中的任何位置识别注释,但建议将其放在文件的顶部。

Pragmas

关键字pragma版本标识指令,用来启用编译器检查,版本标识指令通常只对本文件有效,所以我们需要把这个版本标识添加到项目中所有的源文件中。如果使用import导入其他的文件,标识并不会从被导入的文件,加入到导入的文件中

版本标注

pragma solidity ^0.5.0;

源文件将既不允许低于0.5.0,也不允许高于(包含)0.6.0版本(由于^这个符号),这样可以保证在0.6.0版本之前不会有重大变更

使用版本标准不会改变编译器的版本。它仅仅是告知编译器去检查版本是否匹配,如果不匹配,编译器就会提示一个错误

导入其他源文件

import "file";

将”file“中导入所有的全局符号到当前全局作用域中

这种形式已经不建议使用,因为可能会污染当前命名空间。

import * as xdpCs from "file";
更简洁写法
import “file” as xdpCs;

创建一个全新的全局符号xdpCs,他的成员均来自“file”中的全局符号

import {xdp as xdpCs,Cs} from “file”;

如果存在命名冲突,则可以在导入时重命名符号。创建全新的全局符号xdpCs和Cs,分别从“file”中xdp,Cs中引用

通常使用相对引用import “./file.sol”;并且避免使用..,后面这种方式可以使用全局路径并设置映射

路径

/作为目录分割符、.表示当前目录、..表示父目录,但是只有...后面是/时,它们才被作为当前目录或者父目录。只有路径以... 开头时,才能被视为相对路径

import “./file” as xdpCs;语句导入当前源文件同目录下的文件file。如果用import “file” as xdpCs;代替,可能会引入不同的文件

注释

单行注释//:单行注释由任何unicod行终止符终止。在注释之后终止符代码仍然是源代码的一部分。如果它不是ascii符号,他会导致解析器错误

多行注释/*...*/

// 单行注释
/*
多行注释
*/

/** */通过标签文档化函数、标注形式校验通过的条件,和提供一个当用户试图调用一个函数时显示给用户的确定性文字

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "hardhat/console.sol";
/** @title token */
contract Token {
    string public name = "My hardhat Token";
    string public symbol = "MBT";

    uint256 public totalSupply = 1000000;
    address public owner;
    mapping(address => uint256)balances;

    constructor(){
        balances[msg.sender] = totalSupply;
        owner = msg.sender;
    }
    /**
    * @param to 买方地址
    * @param amount 金额
    */
    function transfer(address to, uint256 amount) external {
        console.log("Sender balance is %s tokens", balances[msg.sender]);
        console.log("Trying to send %s tokens to %s", amount, to);
        require(balances[msg.sender] >= amount, "Not enough tokens");
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }

    function balanceOf(address account) external view returns (uint256){
        return balances[account];
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XdpCs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值