用Solidity在Truffle上构建一个HelloWorld智能合约

原文地址:石匠的blog

Truffle的环境安装在前文已经整理,这次用Solidity在Truffle写一个HelloWorld以太坊智能合约,并在testrpc上进行测试。当前的软件版本信息如下:

Truffle v4.1.11 (core: 4.1.11)
Solidity v0.4.24 (solc-js)

项目创建

打开Mac的terminal终端,创建一个新目录,并truffle项目初始化。

> mkdir HelloWorld
> cd HelloWorld
> truffle init

初始化好之后的目录结构如下:

HelloWorld
|____truffle.js
|____migrations
| |____1_initial_migration.js
|____test
|____contracts
| |____Migrations.sol
|____truffle-config.js

撰写HelloWorld合约

HelloWorld智能合约测试代码如下:

pragma solidity ^0.4.24;

contract HelloWorld{
    address creator;
    string message;     

    constructor()
    {
        creator = msg.sender;
    }

    function say() constant returns (string)
    {
        return message;
    }

    function setMessage(string _newMsg)
    {
        message = _newMsg;
    }

     /**********
     Standard kill() function to recover funds
     **********/

    function kill()
    {
        if (msg.sender == creator)
            selfdestruct(creator);  // kills this contract and sends remaining funds back to creator
    }

}

保存到contracts目录下的HelloWorld.sol文件中。合约保存了一个message变量,用来存储设置的信息。合约提供了message的设置和获取接口setMessage和say,测试的时候可以调用者2个接口进行测试确认。

编译

在HelloWorld目录下:

> truffle compile

compile只会编译更新过的合约文件,如果有多个文件,且想全部编译,可以使用 truffle compile-all.

运行测试

1.启动testrpc

通过testrpc可以很方便的进行测试,打开一个新的terminal终端执行命令:

> testrpc

默认会在localhost:8545进行合约部署的监听。

2.修改合约配置

因为合约是要发给testrpc做运行,需要再HelloWorld/truffle.js中配置testrpc的地址信息,如下:

module.exports = {
      networks: {
             development: {
             host: "localhost",
             port: 8545,
             network_id: "*" // Match any network id
            }
    }
};

3.添加迁移信息(migrate)

需要配置告诉truffle迁移哪些合约到testrpc,添加一个文件HelloWorld/migrations/2_deploy_contracts.js

var HelloWorld = artifacts.require("./HelloWorld.sol");

module.exports = function(deployer) {
  deployer.deploy(HelloWorld);
};

运行迁移命令,部署合约到testrpc:

> truffle migrate

同样的,这个命令只会迁移修改过的合约,如果有异常错误或者需要手动全部重新迁移,可以运行 truffle migrate --reset.

迁移成功后在testrpc窗口也会有响应的提示信息,包括函数调用和事务执行信息等。

4.命令行测试合约

通过console可以方便的测试合约的开发接口是否访问正常,运行命令:

> truffle console

运行成功后进入到truffle的命令行程序中,可以通过以下命令来测试合约接口,设置信息:

> HelloWorld.deployed().then(i=>i.setMessage("Hello world!"));

HelloWorld.deployed()返回了部署成功的HelloWorld合约的Promise对象,然后通过then()调用setMessage接口。执行成功后可以得到类似如下的信息:

{ tx:
   ‘0xbb506d5a8ad80ae431fcffc326e4910dcd272bba1fe458c8c83b8eefd08b7de1‘,
  receipt:
   { transactionHash:
      ‘0xbb506d5a8ad80ae431fcffc326e4910dcd272bba1fe458c8c83b8eefd08b7de1‘,
     transactionIndex: 0,
     blockHash:
      ‘0x8dd58db70ad49d2741a9d36a6e5f77e5e6c0e19f09935df5cd21e52762472491‘,
     blockNumber: 16,
     gasUsed: 43459,
     cumulativeGasUsed: 43459,
     contractAddress: null,
     logs: [],
     status: 1 },
  logs: [] }

因为setMessage是一个设置接口,会修改区块链的状态,所以他是一个Transaction。然后调用say接口测试是否设置成功:

> HelloWorld.deployed().then(i=>i.say());

返回结果是:

"Hello world!"

表面前面的setMessage设置有效,且say接口访问正常。

小结

以上是用solidity写的很简单的智能合约测试程序,并部署在truffle和testrpc测试验证成功,功能虽然简单,但是走通了以太坊智能合约的基本开发测试流程,以后可以基于此继续做扩展。

原文地址:https://www.cnblogs.com/bugmaking/p/9211225.html

时间: 2024-11-07 03:56:45

用Solidity在Truffle上构建一个HelloWorld智能合约的相关文章

Cocos2d-x 3.0 - Eclipse上构建一个Android项目

Cocos2d-x 3.0 - Eclipse上构建一个Android项目 2014年4月30日 4月末 本篇继续介绍Cocos2d-x 3.0的一些基础内容,前面一篇博客介绍了如何在Visual Studio 2012上编译我们的Cocos2d-x项目,也成功把Helloworld运行起来了.跟以往的版本是类似的,只不过创建空项目的时候命令变成了cocos.本篇博客带给大家的是,如何在Eclipse运行起我们的Cocos2d-x项目,如果童鞋们有看我写的Cocos2d-x 2.2.3版本的交叉

如何在阿里云上构建一个合适的Kubernetes集群

摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目的,也没有很好的发挥K8S集群的优势. 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目的,也没有很好的发挥K8S集

如何利用Truffle React框架构建完整的智能合约

如何利用Truffle React框架构建完整的智能合约 使用solidity的truffle框架开发智能合约,前端使用react框架,最终完成智能合约从前端到后端,从开发到部署的完整流程. 1. 版本需求 Truffle v5.0.28 (core: 5.0.28) Solidity v0.5.0 (solc-js) Node v8.11.2 Web3.js v1.0.0-beta.37 2. 项目初始化 mkdir -p truffle cd truffle truffle unbox re

使用Python truffle 构建完整的智能合约

使用Python truffle 构建完整的智能合约 使用solidity的truffle框架开发智能合约,使用Python调用合约. 1. 合约编写.编译和部署 git clone https://github.com/jamess010/AIonChain cd ./AIonChain && cd ./master/smartcontract truffle develop (port: 9545) compile migrate (--reset) 2. 使用 python 调用 安

Linux上构建一个RADIUS服务器详解

作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息.但是网络设备通常只支持有限的用户管理功能.学习如何使用Linux上的一个外部RADIUS服务器来验证用户,具体来说是通过一个LDAP服务器进行验证,可以集中放置存储在LDAP服务器上并且由RADIUS服务器进行验证的用户信息,从而既可以减少用户管理上的管理开销,又可以使远程登录过程更加安全.数据安全作为现代系统中网络安全的一部分,与系统安全一样的重要,所以保护数据--确保提供机密性.完整性和可用性--对管理员来说至关重要

使用 Browser-solidity 在 Go-Ethereum 上进行简单的智能合约部署

1.基本概念 之前文章中,已经讲过 Go-Ethereum 1.7.2 如何安装及搭建以太坊私有链,这里就不多介绍. 在本文讲解之前,先介绍以下几点基本概念. 1.1.什么是智能合约? 智能合约是存储在区块链上的一段代码,它们可以被区块链上的交易所触发,触发后,这段代码可以从区块链上读取数据或者向区块链上写入数据. 1.2.什么是Solidity? Solidity 是 Ethereum 的一种契约型编程语言,运行在Ethereum虚拟机(EVM)之上. 1.2.1.Solidity的语言特性

Cocos2dx 3.0开发环境搭建--Eclipse上构建一个Android项目

一.前言: 本篇主要介绍Cocos2d-x 3.0的一些基础内容,以及在Eclipse上上编译我们的Cocos2d-x项目,成功把Helloworld运行起来了.看完本篇博客之后,你就会知道Cocos2d-x 3.0竟然发生了如此大的变化,变得如此简单,环境搭建.项目创建.编译的方式更加人性化了. 二.环境准备: 1.下载ADT Bundle(Eclipse捆绑了SDK和ADT),或者是Eclipse安装了ADT插件. 2.安装JDK.NDK.Ant .Python,然后配置环境. 3.Coco

使用maven构建一个helloworld maven项目

1.下载maven http://maven.apache.org/ 选择一个较新版本下下来 2.配置m2_home环境变量 先解压,新建用户变量m2_home,将bin目录添加到path变量中 3.测试是否安装成功:mvn -version 4.在某个目录下输入mvn archetype:generate,要等一会儿 第一次要下载不少jar包,到 Generating project in Interactive mode 时要等很久不要关,继续等 5.让你输入groupid:com.hy 输

【刘文彬】【精解】开发一个智能合约

原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/contract.html 智能合约 这两天被老大搞去搬砖,学习计划有变但无大碍,这篇文章将仔细分析智能合约相关内容. 关键字:智能合约,remix,Solidity,truffle,geth,leveldb,datadir,ganache,web3j 合约 合约也称合同.协议,是甲乙双方参与的,制定一系列条目规范双方权利与义务的文件.智能合约是电子化的,自动执行的,去中心化的,具有不可抵赖性,本质上它