首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在帐户之间切换以运行智能契约

在帐户之间切换以运行智能契约
EN

Ethereum用户
提问于 2018-11-17 21:10:03
回答 2查看 648关注 0票数 0

我正在使用truffle develop测试我的智能合同。我曾尝试使用web3.eth.defaultAccount = web3.eth.accounts[1]在不同帐户之间切换,但没有成功。我该如何做到这一点?

EN

回答 2

Ethereum用户

发布于 2018-11-17 21:27:34

作为一种时尚的东西,我喜欢在前面宣布参与者:

代码语言:javascript
复制
contract('MyContract', function(accounts) {

    var owner = accounts[0];
    var seller = accounts[1];
    var buyer = accounts[2];

然后,在运行测试(或UI)时,明确说明谁在说话:

代码语言:javascript
复制
it("should do something", function() {
    myContract.method(args, {from: owner}).then(...

希望能帮上忙。

更新

accounts数组是钱包中的帐户列表(而不是网络本身),因此测试客户端能够使用其中的任何一个进行签名。

尽管松露使用“干净的房间”方法进行测试,但您可以通过在每次测试之前部署一个新的新合同来避免对它的依赖,并避免可能出现的混乱。该方法忽略迁移,并在“如实”的基础上与网络配置进行竞争。它为您提供了控制部署过程的机会,包括在客户端测试级别部署合同的帐户。

代码语言:javascript
复制
var myContract; // this will be the contract instance

beforeEach("deploy new MyContract", function() {
    return MyContract.new(args, { from: owner }) // make a new one and choose the deployer
        .then(instance => myContract = instance);
});

如果你把这些都放在一起,你就会得到这样的东西

代码语言:javascript
复制
MyContract = artifacts.require(...

contract('MyContract', function(accounts) {

    var myContract;        
    var owner = accounts[0];
    var seller = accounts[1];
    var buyer = accounts[2];

    beforeEach("deploy new MyContract", function() {
      return MyContract.new(args, { from: owner }) // control who deployed it
      .then(instance => myContract = instance);
    });

    it("should do something", function() {
      myContract.method(args, {from: owner}).then(... // control who accesses it
票数 1
EN

Ethereum用户

发布于 2018-11-20 06:27:03

您可以从“develop”命令行更改合同使用的默认帐户。

代码语言:javascript
复制
> MetaCoin.defaults({ from: '0x123413413412341234' })

这将影响到对该合同执行的所有事务。

正如Rob所指出的,另一个选项是显式地覆盖每个事务中的from

代码语言:javascript
复制
> MetaCoin.deployed().transfer(to, value,
    { from: '0x13412341234...' })

可以在配置文件from中指定truffle-config.js

这是比较复杂的,但是如果来自develop的东西不适合您的需求,它是很方便的。

您必须定义您自己的网络并运行您自己的ganache实例。

代码语言:javascript
复制
module.exports = {
  networks: {
    myCustomConfiguration: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*",
      from: '0x11111..111'
    }
  }
};

现在,在另一个控制台中执行ganache,您可以启动truffle console --network myCustomConfiguration

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/62555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档