truffle 开发笔记(一)

以太坊开发框架——Truffle的基础使用 这里写目录标题TruffleTruffle 简介Truffle 的客户端安装Truffle创建项目Migrationartifacts.require()exports 的函数deployer 对象更新 migration 文件更新 truffle 配置文件创建账户(可用 metamask 上账户转币)部署新建 JavaScript 文件 app/scripts/index.js Truffle Truffle 简介 truffle unbox webpack 一条命令由于要下载众多需要的模块,大概耗时 1 阅读详情

目录

/contract 智能合约 

/migration 部署合约

/test测试合约:

1. 编写 .sol文件来测试

2 编写.js文件来测试

与合约交互

发起交易:

发起调用

 捕捉事件:


1. truffle

https://truffleframework.org/docs/getting_started 

(1)测试合约中获得部署地址: truffle/DeployedAddresses.sol 库 提供了 DeployedAddresses.<contract name>();

(2)所有测试合约明星必须以 Test 开头, 测试函数的名字以test开头;

(3)一般情况, 合约方法需要以交易的形式传递给 以太坊, 但是并不返回方法的结果, 而是返回一个交易的ID.

(4)写数据称为 transaction 交易, 而读数据称为 call 调用。交易:消耗gas, 改变网络状态,并不立即执行,返回交易ID;

            调用:不消耗gas,不改变状态,立即执行,直接返回需要的值。

(5)commands: build, compile, create, debug, exec, install, migrate, networks, opcode, publish, test, version.

/contract 智能合约 

pragma solidity ^0.4.2;

import "./ConvertLib.sol";

// 这只是货币合约的简单实现, 并非兼容标准, 也不能直接与其他货币/token合约交互.
// 如果想要创建兼容标准的token, 参考: https://github.com/ConsenSys/Tokens. 继续!

contract MetaCoin {
    mapping (address => uint) balances;

    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    function MetaCoin() {
        balances[tx.origin] = 10000;
    }

    function sendCoin(address receiver, uint amount) returns(bool sufficient) {
        if (balances[msg.sender] < amount) return false;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        Transfer(msg.sender, receiver, amount);
        return true;
    }

    function getBalanceInEth(address addr) returns(uint){
        return ConvertLib.convert(getBalance(addr),2);
    }

    function getBalance(address addr) returns(uint) {
        return balances[addr];
    }
}

/migration 部署合约

var Migrations = artifacts.require("Migrations");

module.exports = function(deployer) {
  // Deploy the Migrations contract as our only task

  //Migrations构造函数需要参数时,需要添加参数;
  deployer.deploy(Migrations);
};

/test测试合约:

1. 编写 .sol文件来测试

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/MetaCoin.sol";

contract TestMetacoin {
  function testInitialBalanceUsingDeployedContract() {
    MetaCoin meta = MetaCoin(DeployedAddresses.MetaCoin());

    uint expected = 10000;

    Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
  }

  function testInitialBalanceWithNewMetaCoin() {
    MetaCoin meta = new MetaCoin();

    uint expected = 10000;

    Assert.equal(meta.getBalance(tx.origin), expected, "Owner should have 10000 MetaCoin initially");
  }
}

2 编写.js文件来测试

// 引入合约
var MetaCoin = artifacts.require("./MetaCoin.sol");

// 类似 describe, 返回账号列表
contract('MetaCoin', function(accounts) {
  it("should put 10000 MetaCoin in the first account", function() {
    return MetaCoin.deployed().then(function(instance) {
      return instance.getBalance.call(accounts[0]);
    }).then(function(balance) {
      assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");
    });
  });
  it("should call a function that depends on a linked library", function() {
    var meta;
    var metaCoinBalance;
    var metaCoinEthBalance;

    return MetaCoin.deployed().then(function(instance) {
      meta = instance;
      return meta.getBalance.call(accounts[0]);
    }).then(function(outCoinBalance) {
      metaCoinBalance = outCoinBalance.toNumber();
      return meta.getBalanceInEth.call(accounts[0]);
    }).then(function(outCoinBalanceEth) {
      metaCoinEthBalance = outCoinBalanceEth.toNumber();
    }).then(function() {
      assert.equal(metaCoinEthBalance, 2 * metaCoinBalance, "Library function returned unexpected function, linkage may be broken");
    });
  });
  it("should send coin correctly", function() {
    var meta;

    // Get initial balances of first and second account.
    var account_one = accounts[0];
    var account_two = accounts[1];

    var account_one_starting_balance;
    var account_two_starting_balance;
    var account_one_ending_balance;
    var account_two_ending_balance;

    var amount = 10;

    return MetaCoin.deployed().then(function(instance) {
      meta = instance;
      return meta.getBalance.call(account_one);
    }).then(function(balance) {
      account_one_starting_balance = balance.toNumber();
      return meta.getBalance.call(account_two);
    }).then(function(balance) {
      account_two_starting_balance = balance.toNumber();
      return meta.sendCoin(account_two, amount, {from: account_one});
    }).then(function() {
      return meta.getBalance.call(account_one);
    }).then(function(balance) {
      account_one_ending_balance = balance.toNumber();
      return meta.getBalance.call(account_two);
    }).then(function(balance) {
      account_two_ending_balance = balance.toNumber();

      assert.equal(account_one_ending_balance, account_one_starting_balance - amount, "Amount wasn't correctly taken from the sender");
      assert.equal(account_two_ending_balance, account_two_starting_balance + amount, "Amount wasn't correctly sent to the receiver");
    });
  });
});

与合约交互

发起交易:

var account_one = "0x1234..."; // 地址1
var account_two = "0xabcd..."; // 地址2

var meta;
MetaCoin.deployed().then(function(instance) {
  meta = instance;
  return meta.sendCoin(account_two, 10, {from: account_one});
}).then(function(result) {
  // 执行此回调, 说明交易成功执行
  alert("Transaction 交易成功!")
}).catch(function(e) {
  // 执行此回调, 说明出现错误
})

发起调用

var account_one = "0x1234..."; // 一个地址

var meta;
MetaCoin.deployed().then(function(instance) {
  meta = instance;
  return meta.getBalance.call(account_one, {from: account_one});
}).then(function(balance) {
  // 执行此回调, 说明调用成功执行. 注意: 这个方法会立即回调, 没有等待时间.
  // 我们打印一下合约方法返回的余额
  console.log(balance.toNumber());
}).catch(function(e) {
  // 执行此回调, 说明出现错误
})

 捕捉事件:

var account_one = "0x1234..."; // 地址1
var account_two = "0xabcd..."; // 地址2

var meta;
MetaCoin.deployed().then(function(instance) {
  meta = instance;  
  return meta.sendCoin(account_two, 10, {from: account_one});
}).then(function(result) {
  // result 是一个包含如下内容的对象:
  //
  // result.tx      => 交易哈希值, 字符串
  // result.logs    => 解码后的事件内容列表
  // result.receipt => 交易收据对象, 包含交易消耗的 gas 等

  // 我们可以循环处理这些事件内容 (result.logs) 来检测是否我们触发了转账 (Transfer) 事件.
  for (var i = 0; i < result.logs.length; i++) {
    var log = result.logs[i];

    if (log.event == "Transfer") {
      // 我们找到了交易
      break;
    }
  }
}).catch(function(err) {
  // 执行此回调, 说明出现错误
});

 

Truffle+ganache进行区块链项目开发 上一篇文章介绍了如何搭建Truffle开发框架,所以的开发都是基于这个框架,所以在开发之前需要把这个框架搭建好,不懂的需要先去看上一篇文章,链接如下: https://blog.youkuaiyun.com/xuecuilan/article/details/90379919 初步建立好的项目目录如下: contracts:用来存放你编写的智能合约代码 migrations:用来部署的文件夹 t... 阅读详情

相关推荐

Vyper教程 使用Truffle框架开发Vyper

文章目录写在前面什么是Truffle安装TruffleVyper支持使用Truffle框架开发测试Vyper创建空项目创建模板项目进入控制台编译部署测试写在最后 写在前面 上一篇 Vyper 编译部署合约 的最后,我们提到了在开发智能合约过程中,为了更方便的即时部署和测试,我们需要一个智能合约开发、测试框架:truffle。本文就将简单的介绍如何使用truffle快速的在本地测试Vyper合约。 ...

队长的博客 1306

解决“@openzeppelin/contracts/proxy/ not find“问题

今天在slither测试智能合约时,发现"@openzeppelin/contracts/proxy " File not found问题,如图(1)所示。解决方法如下: 1) 安装@openzepplin/contracs、@openzeppelin/contracts-upgradge依赖包 2) 将slither的加载路径设置package.json的同级目录 3)修改.sol的库文件引用路径,将@openzeppelin 改成 ../node_modules/@openzeppelin

sanqima的专栏 2826

Truffle-Docs:Truffle官方技术文档中文版

Truffle-Docs Truffle官方技术文档的翻译 学习truffle中,就顺带翻译一下官方技术文档。有问题,欢迎 issues GETTING STARTED Writing tests in JavaScript Writing tests in Solidity Interacting with your contracts Package management via EthPM Package management via NPM Debugging your contracts Using Truffle Develop and the console Writing external scripts Using the build pipeline Contact the developers ADVANCED Configuration Networks and a

【web3实践 | 以太坊开发框架Truffle使用】

Truffle是一个面向以太坊的开发框架,提供一整套构建、测试、部署以及管理智能合约的开发工具。Truffle可以与以太坊节点交互,使开发人员能够在本地开发、测试和部署智能合约。Truffle提供了一个基于命令行的、易于使用的开发环境,可以通过Truffle来编写智能合约,进行本地测试和调试,进行远程部署,以及与以太坊网络进行交互。Truffle还提供了自己的智能合约编译器和构建管道,可以方便地构建、优化和管理智能合约的构建过程,减少了手动干预的需要。

鱼干的博客 4164

Matlab生成dsp程序——环境搭建(c2000系列[F28335、F2837x]都适用)

一、环境配置 (28377D的操作是一模一样就是硬件设置的时候需要选择28377d进行相应的设置) 1)matlab与ccs联合编译需要安装对应的matlab版本和ccs版本,且只有2016a以上的matlab支持c2000系列。具体对应关系参照: http://software-dl.ti.com/ccs/esd/documents/ccs_matlab.html 2)matlab版本确定之后,还需要安装有关于ccs的相关软件: I、TI Code Composer Studio xxxx(对应

qq_42151264的博客 2万+

学习STM32的无人机控制

下面是一个基于STM32的无人机控制的简单示例代码,包括四旋翼的PID控制、遥控器信号解析和电机控制。本示例以STM32F103系列为例,使用Keil C编译器进行开发。

qq_67153941的博客 706

5. 用solidity测试

Solidity 测试合约以文件的形式与 Javascript 测试一起存在。运行时,它们将作为每个测试协定的单独测试套件包含在内。这些合约保留了 Javascript 测试的所有好处:即每个测试套件的、直接访问已部署的合约以及导入任何合约依赖关系的能力。Solidity 测试不应从任何合约(如合约)延伸而来。这使您的测试尽可能少,并让您完全控制您编写的合同。TestSolidity 测试不应受制于任何断言库。Truffle 为您提供了一个默认的断言库,但您可以随时更改此库以满足您的需求。

qq_40083796的博客 574

用Python实现古诗词填字游戏(三)

古诗词做填字游戏的第三部分代码,也是最核心的部分。实现对诗文和关键字的选定,并确定文字的输出位置。

PosPro的专栏 6118

Truffle 合约漏洞测试

Truffle 目录结构首先将需要测试的合约,移动到contracts文件夹下。以最基础的HelloWorld合约为例子,进行合约测试:采用和来编写测试用例。

Pollsp的博客 847

Axure原型模板与元件库APP交互设计素材(附资料)

在Axure中,手机模型是展示APP或小程序界面效果的重要工具。通过导入手机模型元件,设计师可以更加直观地模拟真实设备的显示效果,从而更准确地评估设计的可行性和用户体验。Axure官方及第三方资源库中提供了多种品牌和型号的手机模型,如iPhone、Android等,设计师可以根据项目需求选择合适的模型进行使用。Axure作为一款强大的原型设计工具,为APP和小程序的设计与开发提供了丰富的界面组件元件库和交互设计素材。

招风的黑耳优快云 1981

Codex 100个真实案例 - 用AI画业务流程图Mermaid(产品经理都馋哭了)

还在用 Visio、ProcessOn 拖拖拽拽画流程图?改一个箭头方向就要调半天?本案例教你用 Codex 自然语言描述业务流程,AI 自动转为 Mermaid 代码,一秒生成专业流程图、时序图、甘特图、饼图!还能搭建在线渲染工具、批量导出 PNG/SVG、集成到文档系统。产品经理、架构师、项目经理都能用,从此画图再也不是体力活!

yueyeguzhuo的专栏 354

以太坊:用 Solidity 写测试用例

用 Solidity 写测试用例 Solidity test contracts live alongside Javascript tests as.solfiles. Whentruffletestis run, they will be included as a separate test suite per test contract. These contracts mai...

跨链技术践行者 1万+

Windows 下 Hermes Agent(爱马仕)安装全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Hermes Agent(爱马仕) 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Hermes Agent 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装WSL环境 2.2 步骤二 安装Python环境 2.3 步骤三 安装Hermes Agent 2.4 步骤四 修正 API Key 错误 2.5 步骤五 配置多个模型 2.6 步骤六 启动Hermes Agent 3. 常见问题及解决方案 4. 总结

weixin_43178406的博客 14万+

以太坊开发(一)——Truffle和Ganache

Truffle是目前最流行的以太坊开发框架,采用JavaScript编写,支持智能合约的编译、部署和测试。 一、安装Truffle 1. 首先安装Truffle依赖的NodeJS: curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash - sudo apt-get install -y nodejs sudo apt-get ...

飞久 4万+

在iPad上使用Python进行编程

如果你拥有一台iPad,并且想在上面编写和运行Python代码,你会发现iPad提供了一些适用的工具和应用程序来满足你的需求。安装一个Python解释器应用程序,编写和运行Python代码,使用第三方库和模块,以及存储和共享代码,这些步骤将帮助你在iPad上进行Python编程。要在iPad上运行Python代码,首先需要安装一个Python解释器。这些应用程序提供了一个交互式的开发环境,允许你编写、编辑和运行Python代码。一旦你安装了Python解释器应用程序,你可以开始编写Python代码了。

2301_79366435的博客 4628

Midscene.js(2):代码集成 + 桥接模式(Bridge Mode)的使用「喂饭教程」

本文将手把手教你从零开始搭建一个 Node.js 项目,集成 Midscene.js,并利用其桥接模式实现对 Chrome 浏览器的自动化操作。我们将通过具体的实例,来展示 Midscene.js 的便捷性与 AI 能力的结合。

blues_C的博客 1845

【Truffle】一、Truffle的安装与部署

需要注意的是,nodejs的版本在官方文档的要求是 v8.9.4 或 之后的版本,然而在实际安装部署Truffle时,尽量建议大家选择更高的版本,避免出现下图的问题!正常的流程为:truffle develop(启用测试网络) => compile(编译合约) => migrate(部署合约) => test(测试合约)这里是下载官方提供的一个合约工程,我们在后期熟练之后可以直接运行truffle init创建一个空的工程。这里我就以nodejs的20版本为例,开始安装Truffle。

naihe_fish的博客 8741

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

使用truffle开发Dapp

介绍 Truffle 是一个在以太坊进行 DApp 开发的世界级开发环境、测试框架。 安装truffle 在安装truffle之前需要安装nodejs,安装后通过如下命令安装truffle: sudo npm install -g truffle 安装过程中可能会报错,如果报错则执行如下命令升级nodejs: sudo npm install -g n sudo n stable truffle安装完成后用如下命令检查: truffle -v 写合约 我们写一个简单的投票合约,如下: prag

令狐一冲 4379

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Truffle开发入门

一、Truffle框架入门 Truffle是一个功能强大的Dapp开发框架。使用Truffle在以太坊上开发应用程序变得更加简单。 Truffle官网:www.truffleframework.com (1)安装Truffle >> npm install -g truffle 安装结束后,可以执行如下命令测试是否安装成功。 >> truffle versi...

zhongliwen1981的专栏 1142

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Truffle

Truffle是一个面向以太坊的开发框架,提供一整套构建、测试、部署以及管理智能合约的开发工具。Truffle可以与以太坊节点交互,使开发人员能够在本地开发、测试和部署智能合约。

xiaoMa的博客 1597

Truffle 开发入门

Truffle 是一个以太坊智能合约集成开发框架。Truffle 使用以太坊虚拟机(EVM)为区块链提供了世界级的开发环境、测试框架和资产管道,旨在让开发人员的工作更轻松。本文我们从一个 Truffle 官方示例入手,带你快速了解利用 Truffle 开发区块链项目的基础知识,包括 Truffle 项目的创建,智能合约的编译与部署,以及 Truffle 与智能合约进行交互实现区块链上的交易。

StevenX5 1995

【以太坊开发06】Truffle开发入门

truffle

欢迎来到胡桃木的博客 2713

使用Truffle开发Dapp

简介 Dapp VS App 去中心化的应用的后端是一个分布式的网络(中心化应用后端是一个中心化的节点)。前端连接到网络中的任意一个节点都一样。 去中心化应用给节点发送的请求叫交易,节点不单自己处理请求,还把请求转发到网络的其他节点,请求的最终执行需要网络的共识,所以应用不能直接拿到结果,是异步的,前端想要知道状态的改变需要监听事件的方法。 Dapp开发流程.png 第一个去中心化应用 本应用使用Truffle来开发Dapp。功能与 第一个去中心化应用 一样。 应用效果图如下 ..

qiange520的专栏 1458

truffle

Truffle套件是一个开发以太坊 (Ethereum) 区块链DApp (分布式应用程序) 的开发环境,是开发DApp的一站式解决方案,功能包括:编译合约、部署合约、开发DApp前端、测试DApp等。

henulmh的博客 2946

Boring Notch 快速指南:MacBook 刘海屏控制中心

想切歌却要先翻出控制条?Boring Notch 把音乐控制、音量亮度、电量监控这些小事都收进了 MacBook 刘海屏里,抬个手就能完成。 ## 先把 Boring Notch 跑起来 1. 克隆仓库到本地: ``` git clone https://gitcode.com/gh_mirrors/bor/boring.notch ``` 2. 进入项目目录,用 Xcode 打开并构建:

gitblog_00108的博客 803

以太坊:Truffle开发入门

以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只搭建环境,运行第一个区块链程序(Dapp)。 安装truffle $ npm install -g truffle 依赖环境 NodeJS 访问https://nodejs.org官方网站下载...

跨链技术践行者 8390
上一篇: Matplotlib 图例
下一篇: 学习资料 blockchain(二)
for_ge
博客等级 码龄9年 10粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值