solidity学习1

本文介绍了Solidity智能合约的文件结构,包括版本声明、引用其他源文件的方式、编译器解析引用文件机制等内容,并提供了代码注释及文档注释的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

solidity智能合约文件结构

版本声明

pragma solidity ^0.4.0;

说明:
1. 版本要高于0.4才可以编译
2. 表示高于0.5的版本则不可编译,第三位的版本号可以变,流出来用作bug修复(如0.4.1的编译器有bug,可在0.4.2修复,现有合约不用改代码)。

引用其它源文件

  • 全局引入
import "filename";
  • 自定义命名空间引入
import *as symbolName from "filename"
  • 分别定义引入
import {symbol1 as alias,symbol2} from "filename"
  • 非es6兼容的简写语法
import "filename" as symbolName
  • 等同于上述
import *as symbolName from "filename"
关于路径

引入文件路径时要注意,非.打头的路径会被认为是绝对路径,所以要引用同目录下的文件使用

import "./x" as x;

也不要使用下述方式,这样会是在一个全局的目录下

import "x" as x;

为什么会有这个区别,是因为这取决于编译器,如果解析路径,通常来说目录层级结构并不与我们本地的文件一一对应,它非常有可能是通过ipfs,http或git建立的一个网络上的虚拟目录。

编译器解析引用文件机制

各编译器提供了文件前缀映射机制。
1. 可以将一个域名下的文件映射到本地,从而本地的某个文件中读取
2. 提供对同一实现的的不同版本的支持(可能某版本的实现前后不兼容,需要区分)
3. 如果前缀相同,取最长
4. 有一个fallback-remapping机制,空串会映射到“/usr/local/include/solidify”

solc编译器

命令行编译器,通过下述命令命名空间映射提供支持

context:prefix=target

上述的conetxt:=target是可选的。所有context目录下的prefix开头的会被替换为target
举例来说,如果你将github.com/ethereum/dapp-bin拷到本地的/usr/local/dapp-bin,并使用下述方式使用文件

import "github.com/ethereum/dapp-bin/library/iterable_maping.sol" as it_mapping;

要编译这个文件,使用下述命令:

solc github.com/ethereum/dapp-bin=/usr/local/dapp-bin source.sol

另一个更复杂的例子,如果你使用一个更旧版本的dapp-bin,旧版本在/url/local/dapp-bin_old,那么,你可以使用下述命令编译

solc module1:github.com/ethereum/dapp-bin=/usr/local/dapp-bin  \
        modeule2:github.com/ethereum/dapp-bin=/usr/local/dapp-bin_old \
        source.sol

需要注意的是solc仅仅允许包含实际存在的文件。它必须存在于你重映射后目录里,或其子目录里。如果你想包含直接的绝对路径包含,那么可以将命名空间重映射为=\
备注:如果有多个重映射指向了同一个文件,那么取最长的那个文件。

browser-solidity编译器

browser-solidity编译器默认会自动映射到github上,然后会自动从网络上检索文件。例如:你可以通过下述方式引入一个迭代包:

import “github.com/ethereum/dapp-bin/library/iterable_mapping.sol” as it_mapping

备注:未来可能会支持其他的源码方式

代码注释

两种方式,单行(//),多行(/**/
示例


// 这是一行注释
/*
这是
多行注释
*/

文档注释

写文档用三个斜杠////**...*/,可以使用Doxygen语法,以支持生成对文档的说明,参数体验的注解,或者是在用户调用这个函数式,弹出来的确认内容。
示例

pragma solidity ^0.4.0/** @title Shape calculator.*/
contract shapeCalculator{
    /**
    *@dev calculate a rectangle's suface and perimeter

    *@param w width of the rectangles

    *@param h height of the rectangles

    *@return s surface of the rectangles

    *@return p perimeter of the rectangles

    */

    function rectangles(uint w, uint h) returns (uint s, uint p){

        s = w * h;

        p = 2 * ( w + h) ;

    }

}

本文章转载地址:http://www.tryblockchain.org/Solidity%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84.html

### Solidity 学习路线图 #### 1. 基础概念理解 对于初学者来说,熟悉以太坊的概念至关重要。了解什么是智能合约以及它们如何在去中心化应用程序 (DApps) 中发挥作用是必要的[^1]。 #### 2. 编程语言基础 Solidity 是一种面向对象的语言,具有 C++、Python 和 JavaScript 的特性。因此,在深入研究之前,具备这些编程语言的基础知识是有帮助的。可以从简单的语法开始学习,比如变量声明、数据类型、控制结构等。 #### 3. 智能合约开发实践 一旦掌握了基本的编码技巧,就可以尝试编写第一个智能合约了。这通常涉及创建一个可以存储和检索简单信息的小型合约。随着经验的增长,逐渐过渡到更复杂的逻辑实现上,例如代币发行或投票系统的设计。 #### 4. 工具链集成 为了使开发过程更加高效,应该学会使用各种工具来辅助工作。Truffle Suite 提供了一套完整的框架用于构建 DApp;Remix IDE 则是一个在线平台支持即时编译与部署测试网上的合约;Ganache 可作为本地私有网络模拟器加快迭代速度[^2]。 #### 5. 安全审计意识培养 安全始终是最重要的一环。由于区块链不可篡改的特点决定了任何漏洞都可能导致严重后果。所以要特别注意常见攻击模式的学习,如重入攻击、整数溢出等问题,并养成良好的编程习惯减少潜在风险点[^3]。 #### 6. 社区参与和技术交流 加入活跃的技术社区能够获得最新资讯并与其他开发者互动交流心得体验。GitHub 上有许多开源项目可供贡献代码;StackOverflow 论坛里也有大量关于解决具体问题的经验分享帖子值得借鉴参考。 ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() view public returns (uint){ return storedData; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值