首页 > 其他分享 >Hello World with solidity

Hello World with solidity

时间:2024-07-03 15:42:40浏览次数:1  
标签:Solidity 以太 solidity 智能 编写 World 区块 合约 Hello

1. Solidity 是什么?

Solidity 是一种面向对象的、静态类型的编程语言,专为在以太坊上编写智能合约而创建。由于以太坊上的智能合约可以处理真实世界的资产(比如加密货币),所以Solidity的设计非常关注安全性。

以下是 Solidity 的一些主要特点:

  1. 类型安全和静态类型:这可以避免在运行时出现很多类型错误。
  2. 支持复杂的用户定义类型,易于实现复杂的逻辑。
  3. 内建的函数,用于在区块链上进行数组和映射的复杂操作。

在Solidity程序中,你可以创建合约,合约可以包含状态变量、函数、函数修饰符、事件、结构类型和枚举类型。更重要的是,合约可以继承和接口,支持库的创建和使用。

Solidity的开发团队一直在不断改进语言,以保证它在区块链环境下表现优秀。尽管 Solidity 专为以太坊设计,但目前也已被其他区块链平台所使用。以下是一些支持 Solidity 的区块链平台:

  1. 以太坊(Ethereum):明显地, Solidity 是为了以太坊的智能合约开发而设计的,因此以太坊是最主要的支持 Solidity 的区块链平台。
  2. Binance Smart Chain:这是一个与以太坊兼容的区块链,也支持使用 Solidity 编写智能合约。
  3. Polygon(Matic):Polygon 是一个多链平台,旨在将以太坊扩展到多条链。 它支持与以太坊兼容的链(例如 Polygon SDK),也支持 Solidity 语言。
  4. Tron:为了兼容性和开发者友好,Tron 增设了对 Solidity 的支持。
  5. Avalanche:Avalanche 是一个开源平台,为去中心化应用、新型金融原型和去中心化资产提供阻塞验证。 它的 C-Chain 是与 Ethereum 完全兼容的,并且支持 Solidity 语言。
  6. Harmony:这是一个以太坊兼容的平台,他们的智能合约也支持 Solidity。

在这些平台上,开发者能够利用 Solidity 编写智能合约进行各种去中心化应用的开发。

2. Solidity 合约结构

Solidity合约的结构包含数字部分组成,以下是比较标准和常见的组成部分:

  1. 版本声明(Version Pragma):版本声明是Solidity文件中的第一行,用于指定编译器的版本。例如,pragma solidity ^0.8.0; 就是一条指定编译器版本的语句。
  2. 导入其他Solidity文件(Import Statement):你可以通过import命令来导入其他Solidity文件。例如:import "./AnotherContract.sol";
  3. 合约声明(Contract Declaration):定义合约是通过 contract 关键词进行的,后面跟着合约的名称。例如,contract MyContract {} 就声明了一个名为 MyContract 的合约。

在合约声明里,可以包括以下部分:

  • 状态变量(State Variables):状态变量是存储在区块链上的值。这些变量都是持久性的,意味着它们的值会在合约的各个函数调用间持久存在。
  • 函数(Functions):函数是用于修改合约状态的可执行代码单元。
  • 函数修饰符(Function Modifiers):函数修饰符可以更改函数的行为。例如,publicprivateinternalexternal等。
  • 事件(Events):事件是合约的一部分,它们会在合约函数被调用时触发,将数据添加到区块链的事务日志中。
  • 结构类型(Struct Types):结构是定义新的类型的方式。
  • 枚举类型(Enum Types):枚举是定义新的类型的另一种方式,它们是在一组预定义值中进行选择。

在使用 Solidity 编写合约时,必须遵循以上的结构,这样才能确保合约获得正确的行为和数据安全性。

3. 使用Remix IDE

Remix IDE是一个强大的开源工具,可以帮助你编写Solidity智能合约、进行测试、调试,以及部署到以太坊网络上。

以下是使用Remix IDE编写、测试智能合约的基本步骤:

3.1 打开Remix

访问它的官方网站:https://remix.ethereum.org/,界面如下:

Remix

3.2 编写智能合约

在代码编写窗口中,你可以编写新的Solidity智能合约。 例如,我们来编写一个简单的智能合约:“Hello, world!”:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

contract HelloWorld {
    function sayHello() public pure returns (string memory) {
        return "Hello, world!";
    }
}

HelloWorld

3.3 编译合约

在左边的导航栏中,选择‘Solidity编译器’,然后点击‘编译’按钮。如果你的代码无误,编译将成功完成,无需采取进一步的操作。如果有任何错误,它们将在"编译"部分底部的输出窗口中进行展示。

compoler

3.4 部署合约

在左侧的导航栏选择‘部署和运行事务’,在下拉菜单选择合适的以太坊环境,然后点击‘部署’按钮来将你的合约部署到这个环境。你的环境可以是JavaScript VM(一个沙箱环境,只在你的浏览器中运行),也可以是任何连接到的以太坊测试网络。

deploy

3.5 测试合约

测试是,你将看到在部署部分下面有一个新的面板,列出了你的合约和它的函数。如果你选择了上述“HelloWorld”合约,你可以看到'sayHello'函数。点击这个函数,应该会在下方的控制台显示"Hello, world!"。

test

以上就是使用Remix IDE编写、编译、部署和测试一个简单的Solidity智能合约的过程。不过值得注意的是,虽然这是一个基本的演示,但在开发更复杂的智能合约时,这个过程可能会变得更加复杂。


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特


标签:Solidity,以太,solidity,智能,编写,World,区块,合约,Hello
From: https://www.cnblogs.com/lianshuiwuyi/p/18281744

相关文章

  • D. World is Mine
    原题链接题解1.alice的策略一定是从小到大一个一个拿2.为了让alice拿不到某特定值的蛋糕,bob需要在alice拿它之前把它拿完3.在最优策略中,bob一定可以从小拿到大4.设此时bob要拿完第\(i\)类蛋糕,该类蛋糕个数为\(k\)则拿完这个蛋糕bob还有\(i-k-1\)个回合可以用,所以从前面......
  • 【粉丝福利社】Hello Cangjie!华为仓颉编程语言震撼发布!(文末送书-进行中)
    ......
  • AI 大模型企业应用实战(07)-LangChain的Hello World项目
    pipinstall--upgradelangchain==0.0.279-ihttps://pypi.org/simple1创建一个LLM自有算力平台+开源大模型(需要有庞大的GPU资源)企业自己训练数据第三方大模型API(openai/百度文心/阿里通义千问...)数据无所谓让LLM给孩子起具有中国特色的名字。在LangChain中最基本的功......
  • [题解]CF666B World Tour
    CSP-2022S2T1弱化版。思路首先因为边权均为\(1\),所以我们可以在\(\Theta(n^2)\)的复杂度用BFS求解出任意两点\(i,j\)的最短距离\(d_{i,j}\)(如果\(i\)不能到达\(j\),则令\(d_{i,j}=-1\))。有一个贪心的结论,就是使每一条\(A\toB,B\toC,C\toD\)的路径长度......
  • HarmonyOS应用开发——Hello World
    下载HUAWEIDevEcoStudio:https://developer.harmonyos.com/cn/develop/deveco-studio/#download   同意,进入配置页面:  配置下载源以及本地存放路径,包括nodejs和ohpm:   配置鸿蒙SDK路径:   接受协议:  确认无误后,点击下一步,开始自动下载有......
  • 1. hello rvos
    用qemu模拟器模拟一块仿真的板子,然后通过模拟的串口线,在主机上打印hello在qemu中,关于uart寄存器的内存映射如图(物理地址)1.源代码剖析1.platform.h用来定义开发板上的一些东西#ifndef__PLATFORM_H__#define__PLATFORM_H__//这些宏用于防止重复包含头文件。#ifndef......
  • Java:创建一个SpringBoot架构,并尝试访问一个简单的HTML页面:Hello HTML.创建SpringBoot
    下面我们开始教程:第一步:创建Maven工程我这里是Maven工程:之后再在pom文件导入SpringBoot坐标:注:我的平台版本是2020.1,有可能跟大家的不太一样,但创建项目大体类似。Maven即可。直接SpringBoot也可。Next下一步:取名项目名称:InfomanageNext下一步:Fish:然后进入pom.xml......
  • linux重启后SSH无法启动,报/var/empty/sshd must be owned by root and not group or w
    问题:Linux上的SSH无法启动,执行/usr/sbin/sshd报 /var/empty/sshdmustbeownedbyrootandnotgrouporworld-writable。解决办法:查看发现这个目录的属主不是root,所以启动ssh报错#ls-ld/var/empty/sshd/  d——x——x——x2meifuroot1024Feb192024/var/emp......
  • World Map Globe Edition 2
    只需点击几下,WorldPoliticalMap-GlobeEdition2就会在场景添加一个美丽且交互式的3D世界地图。将地球预制件拖动到场景中并自定义外观。完整的资产,具有强大的可视化功能、示例和丰富的API,适用于构建VR、桌面和移动游戏和应用程序。主要功能:-在不访问互联网的情况下,按......
  • #C:比如有如下两个字符串:“hello“、“helhehe“不能使用库函数完成字符串的比较
    #include<stdio.h>#include<string.h>voidtest00()//比如有如下两个字符串:"hello"、"helhehe"不能使用库函数完成字符串的比较{ //时刻需要注意变量i的值  charbuf1[128]="";   printf("请输入第一个字符串buf1:");   //scanf("%s",buf1);......