OnePunch_Mao 2018-05-24 07:48 采纳率: 0%
浏览 1560
已采纳

区块链智能合约调用变量

pragma solidity ^0.4.18;

contract Auction {
event newBid();
address owner;
address public leader;
address public winner;
string public item;
uint public leadingBid;

function Auction(string name, uint price) public {
    owner = msg.sender;
    item = name;
    leadingBid = price;
}
function placeBid() payable public{
    if (msg.value > leadingBid) {
        returnPrevBid();
        leader = msg.sender;
        leadingBid = msg.value;
      emit newBid();
    }
}
function returnPrevBid() private{
    if (leader != 0) {
        leader.transfer(leadingBid);
    }
}
function endAuction() public {
   if (msg.sender == owner) {
       winner = leader;
       owner.transfer(leadingBid);
   }

}
}

请问如何在一个新合约中调用上面这个拍卖合约的 leadingBid 这个变量的结果(在上面合约执行之后)?如果不能,能不能从区块中读取这个变量?很急很急,回答的好可以追加,谢谢。是调用变量,不是函数调用。就算调用getleadingBid函数也不能在另外一个合约返回变量leadingBid的值。

  • 写回答

3条回答 默认 最新

  • QQ150900 2018-05-24 14:31
    关注

    uint public leadingBid;

    这是一个public变量,在智能合约中public变量其实就是一个函数,可以按照调用外部函数的方法来调用这个变量。

    首先得知道这个合约的地址

    然后可以参与下面这段代码,如果对你有帮助,还请给点分哦。

    simple2调用simple1中的函数的方法,要先知道simple1在区块链中的合约地址,然后你就可以像调用函数一样的调用public变量了。

    pragma solidity ^0.4.21;

    contract sample1 {
    //payable是一个内置的函数修改器
    //如果另一个合约在调用方法时发送以太,则需要这个修改器。
    function sample1(int b) payable
    {
    a = b;
    }

    function assign(int c)
    {
        a = c;
    }
    
    function makePayment(int d) payable
    {
        a = d;
    }
    

    }

    contract sample2 {
    function hello() {

    }
    
    function sample2(address addressOfContract)  {
        //当创建sample1合约对象时,发送12 wei
        sample1 s = (new sample1).value(12)(23);
        s.makePayment(22);
        //发送以太也是的
        s.makePayment.value(45)(12);
        //指定要使用的gas数
        s.makePayment.gas(895)(12);
        //发送Ether,并指定gas
        s.makePayment.value(4).gas(900)(12);
        //使用this关键字进行的调用称为外部调用。在函数中,this关键字代表当前合约实例。
        //如果是hello(),则是内部调用
        this.hello();
        //指定一个已经部署好的合约
        sample1 s2 = sample1(addressOfContract);
        s2.makePayment(112);
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条