基于 Solidity 的智能合约详解

简介: 基于 Solidity 的智能合约详解

环境

https://remix.ethereum.org/

基于 Remix 编写,Remix是一种基于Web的集成开发环境(IDE),专门用于开发和部署以太坊智能合约。Remix具有代码编辑器、编译器、调试器和部署工具等功能,它可以帮助开发人员在Web浏览器中轻松编写、测试和部署智能合约。Remix还提供了丰富的文档和示例,以帮助开发人员了解和学习以太坊智能合约开发。Remix由以太坊基金会开发并维护,是一个非常流行的以太坊开发工具之一。

合约代码详解

下面是一个基于 Remix 和 Solidity 的智能合约示例,其中包含了每行代码的含义注释:

// 通过 pragma solidity 指令声明 Solidity 版本
pragma solidity ^0.8.0;

// 创建一个名为 MyContract 的合约
contract MyContract {
    
    // 声明一个名为 myNumber 的 uint 类型的公共变量
    uint public myNumber;

    // 声明一个名为 myString 的字符串类型的公共变量
    string public myString;

    // 声明一个名为 myAddress 的地址类型的公共变量
    address public myAddress;

    // 声明一个名为 myBool 的布尔类型的公共变量
    bool public myBool;

    // 声明一个名为 myArray 的动态数组类型的公共变量,元素类型为 uint
    uint[] public myArray;

    // 声明一个名为 myMapping 的映射类型的公共变量,键为地址类型,值为 uint 类型
    mapping(address => uint) public myMapping;

    // 创建一个名为 setMyNumber 的函数,用于设置 myNumber 变量的值
    function setMyNumber(uint _myNumber) public {

        // 将 _myNumber 的值赋值给 myNumber 变量
        myNumber = _myNumber;
    }

    // 创建一个名为 setMyString 的函数,用于设置 myString 变量的值
    function setMyString(string memory _myString) public {

        // 将 _myString 的值赋值给 myString 变量
        myString = _myString;
    }

    // 创建一个名为 setMyAddress 的函数,用于设置 myAddress 变量的值
    function setMyAddress(address _myAddress) public {

        // 将 _myAddress 的值赋值给 myAddress 变量
        myAddress = _myAddress;
    }

    // 创建一个名为 setMyBool 的函数,用于设置 myBool 变量的值
    function setMyBool(bool _myBool) public {

        // 将 _myBool 的值赋值给 myBool 变量
        myBool = _myBool;
    }

    // 创建一个名为 addToMyArray 的函数,用于将元素添加到 myArray 数组中
    function addToMyArray(uint _myNumber) public {

        // 将 _myNumber 添加到 myArray 数组中
        myArray.push(_myNumber);
    }

    // 创建一个名为 setMyMapping 的函数,用于设置 myMapping 变量的值
    function setMyMapping(uint _myNumber) public {

        // 将 _myNumber 的值映射到 myMapping 映射类型变量的当前调用者地址上
        myMapping[msg.sender] = _myNumber;
    }
}


这个合约包含了一些公共变量和函数,它们可以被外部调用和访问。其中,公共变量包括 myNumber、myString、myAddress、myBool、myArray 和 myMapping。这些变量都是公共的,因此它们可以被外部访问。

目录
相关文章
|
11月前
|
存储 前端开发 JavaScript
区块链智能合约编程语言 Solidity
上文介绍了[区块链生态发展](https://wangbinguang.blog.csdn.net/article/details/131440404),我们知道以太坊的到来可以使开发人员基于区块链开发DApp,本文介绍 Solidity 编程语言的使用,然后基于 Solidity 编写一个简单的智能合约。
99 1
|
JavaScript 前端开发 区块链
【区块链Solidity】智能合约与Solidity介绍
【区块链Solidity】智能合约与Solidity介绍
115 0
|
存储 区块链 数据库
Solidity开发智能合约
一个简单的智能合约 在Solidity中,一个合约由一组代码(合约的函数)和数据(合约的状态)组成。合约位于以太坊区块链上的一个特殊地址。
1491 0
|
存储 JavaScript 前端开发
【智能合约】Solidity 基础知识 | 以太坊智能合约编程语言
目录 注意事项 编译器选择 一些说明 1. 变量 1.1 状态变量 1.2 局部变量 2. 数据类型 2.1 值类型 2.1.1 布尔类型(Booleans): 2.1.2 整型(Integers): 2.1.3 定长浮点型(Fixed Point Numbers): 2.1.4 定长字节数组(Fixed-size byte arrays) 2.1.5 有理数和整型常量(Rational and Integer Literals) 2.1.6 枚举(Enums) 2.1.7 函数类型(Function Types) 修饰符 函数定义 函数返回值 构造函数 2.1.8 地址类型(Address)
380 0
【智能合约】Solidity 基础知识 | 以太坊智能合约编程语言
|
存储 安全 测试技术
智能合约中存在的3种最常见的误解
智能合约中存在的3种最常见的误解
196 0
|
存储 区块链 编译器
以太坊智能合约简介(Solidity)
本文略过了冗杂介绍,直接下沉到代码示例。本文中包含一个存储实例和生成极简单 subcurrency 的实例
|
存储 Java 区块链
6分钟以太坊实战 - 智能合约与Solidity高级语言(一)
1. 简介 合约是存放在以太坊区块链具有特定地址的代码和数据集合。 合约账户之间可以相互传递消息以实现图灵完备运算。 合约以以太坊特定的二进制字节码通过以太坊虚拟机(EVM)运行于区块链上。目前,合约通常是以Solidity(一门长得很像js的语言)高级语言编写,编译后传到区块链上运行。
9582 0
|
JSON 区块链 数据格式
如何通过solc编译solidity编写的以太坊智能合约
solc:solidity的编译器 solidity编写的以太坊智能合约可通过命令行编译工具solc来进行编译,成为以太坊虚拟机中的代码。
2309 0
|
移动开发 前端开发 JavaScript
开发基于以太坊智能合约的DApp
最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原因,在于不了解ganache-cli(原来叫testrpc)/web3/以太坊节点/metamask之间的架构关系。
1563 0
|
存储 区块链 数据安全/隐私保护
什么是以太坊?什么是智能合约?
以太坊智能合约 以太坊是一个分布式的计算平台。它会生成一个名为Ether的加密货币。程序员可以在以太坊区块链上写下“智能合约”,这些以太坊智能合约会根据代码自动执行。
1678 0

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    25
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    26
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    26
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    27
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    24
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    30
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    22
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    20
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    20
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    19