带你玩转以太坊智能合约的"Hello World"

本文是一篇关于以太坊智能合约的入门教程,讲解了如何使用solidity语言编写HelloWorld合约,包括环境搭建、合约编写、编译、部署和与合约互动的步骤。通过跟随教程,读者将了解智能合约的基础知识,学会在本地环境中使用testrpc进行合约测试。

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

1.学习目标

  1. 了解智能合约
  2. 简单环境搭建
  3. 能够利用solidity编写Hello World合约
  4. 合约部署
  5. 和合约互动

2.使用solidity语言撰写智能合约

Ethereum上的智能合约需要使用solidity语言来撰写。solidity是一种类似Javsscript的语言,而且围绕着solidity的各种开发工具链,都是使用属于Javascript生态系的npm来提供的。但solidity在语法上比较像Java或C#,因为和Javascript不同,solidity与Java或C#同属于强类型语言,、在定义函数时同样需要指定回传的类型、同样也需要先编译才能执行。这些特性都是Javascript所不具备的。

3.开发前的准备

我们将使用当前最活跃的智能合约开发框架truffle为基础来开发。ENS(Ethereum Name Service)也是采用truffle框架。其他选择还有embark等。

开发过程中,我们将使用testrpc工具在电脑上模拟智能合约所需的以太坊内存块链测试环境。

testrpc中也包含了Javascript版本的Ethereum虚拟机(Ethereum Virtual Machine),因此可以完整地执行智能合约。

代码编辑器使用Atom,搭配solidity插件来开发。Atom是Github为开发者设计的基于Chromium的编辑器,支持NodeJS写的插件,内置Git,使用MIT协议开源发布。solidity插件除了支持语法高亮之外,也会透过Solium检查并提示基本的语法错误,相当方便。其他编辑器应该也有类似的插件可选择。

4.Ubuntu环境下Atom编辑器安装及使用

sudo add-apt-repository ppa:webupd8team/atom
sudo apt-get update
sudo apt-get install atom

安装插件linter-solidity、autocomplete-solidity、linter-solium以方便solidity代码编写。

5.安装所需工具

首先安装Node.js

安装nvm

cd ~
mkdir .nvm
cd .nvm
git clone https://github.com/creationix/nvm

等待下载完毕后source ~/.nvm/nvm/nvm.sh添加到~/.profile之类的文件中

vim ~/.profile

并在文件末尾添加source ~/.nvm/nvm/nvm.sh

source ~/.profile
nvm --version

检查安装是否正确

安装node

nvm install node
node --version

安装npm

git clone --recursive git://github.com/isaacs/npm.git
cd npm/bin
node npm-cli.js install npm -g
npm --version

安装ethereumjs-testrpc和truffle

npm install -g ethereumjs-testrpc truffle
sily@lyg-sily:~$ npm install -g ethereumjs-testrpc truffle

/home/sily/.nvm/nvm/versions/node/v9.3.0/bin/testrpc -> /home/sily/.nvm/nvm/versions/node/v9.3.0/lib/node_modules/ethereumjs-testrpc/build/cli.node.js
/home/sily/.nvm/nvm/versions/node/v9.3.0/bin/truffle -> /home/sily/.nvm/nvm/versions/node/v9.3.0/lib/node_modules/truffle/build/cli.bundled.js
+ ethereumjs-testrpc@6.0.3
+ truffle@4.0.4
added 343 packages in 115.81s

启动testrpc

安装好后随时可以使用testrpc命令来启动以太坊测试环境。

sily@lyg-sily:~$ testrpc
EthereumJS TestRPC v6.0.3 (ganache-core: 2.0.2)

Available Accounts
==================
(0) 0x7e1897cec8e1a098384d17e85a9cd348ccb92b4a
(1) 0x6c96c6cb16442ab83aea0eb1bc3a183e28a922fe
(2) 0x163f0e06082c5cd14ff56658b186a30b0f6e7d9f
(3) 0x0e9558b2cb935ab26484c3d6783fbf2fe70041c8
(4) 0xa2233f08bbb7e3a826cc4c2cede22caf3a6922e6
(5) 0x3b1317510218f98946e0fb72b1a0685ac00bcbc4
(6) 0xca33f56a03e5ae86e25655f4dd7de88be12ec184
(7) 0xfb56aed85dd00908f1e0729ed80d06f456898588
(8) 0x6cfe240b49a28986057016ef2ecd9d6711f6b632
(9) 0x0e866473d6776edc39935dd5d00425b6ab2a423a

Private Keys
==================
(0) 3ae87bfaeabf103ce723b78525ab1278b2c7652b93b99a0131321adaa7000537
(1) 2f23eaef51f941b7af171a56acbd7524554ad529236b6abb6920935218f5df58
(2) 9b5b5d42786e74364e80b45ecf1a2b7201db7eafe12684f71006fbe3368e6dfe
(3) 33181b42772371fad50f29b8377f7a3de72000397f9b021677e329bede7bfcc7
(4) 3f5f366d89ab9263b92f35368840d24d562af043db8a5ad773dc8cc8f122662d
(5) 29933e3e79129da23da3cc0f5cecb03c583c3ad6c4c1ad8a39d68386fe92d91b
(6) 7e9bd47a6120bb9a240a96ce80866b98646f07cb98197bdffec389805575144b
(7) 0c7144621371a04e4ee733d06482b0a23ed775af17172e75e26f2b8915814e35
(8) 60ab702bdad5a348645f65fb0678cafec891c534964982d97b96f4a57abd78ef
(9) 8ff45f1ccb23bec8a317a6e218b3b50290646317b5c809c797e1522bcef9d031

HD Wallet
==================
Mnemonic:      vapor high liberty evoke pledge bronze critic stomach neck figure recipe mind
Base HD Path:  m/44'/60'/0'/0/{account_index}

Listening on localhost:8545

可以看到testrpc启动后自动建立了10个账号(Accounts),与每个账号对应的私钥(Private Key)。每个账号中都有100个测试用的以太币(Ether)。要注意testrpc仅运行在内存中,因此每次重开时都会回到全新的状态。

一切就绪,我们可以开始建立第一个智能合约项目了。

6.建立项目

开启另一个终端,输入以下命令以建立项目:

sily@lyg-sily:~$ mkdir SmartContractDemo
sily@lyg-sily:~$ cd SmartContractDemo/
sily@lyg-sily:~/SmartContractDemo$ mkdir HelloWorld
sily@lyg-sily:~/SmartContractDemo$ cd HelloWorld/
sily@lyg-sily:~/SmartContractDemo/HelloWorld$ truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

  Compile:        truffle compile
  Migrate:        truffle migrate
  Test contracts: truffle test
sily@lyg-sily:~/SmartContractDemo/HelloWorld$ ls
contracts  migrations  test  truffle-config.js  truffle.js
sily@lyg-sily:~/SmartContractDemo/HelloWorld$ 

目录结构

/contracts:存放智能合约原始代码的地方,可以看到里面有个Migrations.sol文件,我们的HelloWorld.sol文件就存放在这里。

/migrations:这是Truffle用来部署智能合约的功能,待会儿我们会修改2_deploy_contracts.js来部署HelloWorld.sol

/test:测试智能合约的代码放在这里,支持jssol测试。

truffle.js:Truffle的设置文档。

7.新建HelloWorld合约

contracts文件夹下新建HelloWorld.sol文件,当然也可以直接在HelloWorld路径下面直接执行truffle create contract HelloWorld命令来创建HelloWorld.sol

sily@lyg-sily:~/SmartContractDemo/HelloWorld$ ls
contracts  migrations  test  truffle-config.js  truffle.js
sily@lyg-sily:~/SmartContractDemo/HelloWorld$ truffle create contract HelloWorld
sily@lyg-sily:~/SmartContractDemo/HelloWorld$ cd contracts/
sily@lyg-sily:~/SmartContractDemo/HelloWorld/contracts$ ls
HelloWorld.sol  Migrations.sol
sily@lyg-sily:~/SmartContractDemo/HelloWorld/contracts$ 

HelloWorld.sol的文件内容如下:

pragma solidity ^0.4.4;

contract HelloWorld {
    function sayHello() returns (string) {
   
   
        return ("Hello World");
    }
}

代码说明

pragma solidity ^0.4.4;

第一行表明目前使用的solidity版本,不同版本的solidity可能会编译出不同的bytecode^代表兼容solidity 0.4.4~0.4.9的版本。

contract HelloWorld {
    ...
}

contract关键字类似于其他语言中较常见的class。因为solidity是专为智能合约(Contract)设计的语言,声明contract后即内置了开发智能合约所需的功能。也可以把这句理解为

function sayHello() returns (string) {
   
   
    return (
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值