以太坊 智能合约 Solidity interface的使用

本文介绍以太坊网络中两个智能合约如何通过交易和调用进行数据交互。使用Solidity语言编写了两个合约示例,Doug.sol 和 myContract.sol,并展示了如何在一个合约中调用另一个合约的功能。

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

以太坊网络把在网络上读与写数据进行了区分,写数据被称作交易(transaction),读数据被称作调用(call)。

使用工具:remix IDE —browser-based

场景:两个合约分别部署在不同的地址,相互间的调用 数据交互操作

第一个合约:Doug.sol代码如下:

pragma solidity ^0.4.19;
contract Doug{
    mapping (bytes32 => uint) public contracts;
    function Doug() {
        contracts['hww'] = 1;
        contracts['brian'] = 2;
        contracts['zzy'] = 7;
    }
    
    function getDougName(string _name) public view returns(string) {
        return _name;
    }
    
     function getDougAge(uint _age) public pure returns(uint) {
        return 3 ** _age;
    }
}

第二个合约 myContract.sol 代码如下:

pragma solidity ^0.4.19;

contract DogInterface {
    function getDougAge(uint _age) returns (uint);
    function contracts(bytes32 name) returns (uint);
}

contract main{
    
    event FetchContract(address dogInterfaceAddress, address sender, bytes32 name);
    
    address DOUG;
    
    address dogInterfaceAddress = 0x3e6494333ae0e929ade0eb9a19fb02632b8e07cf;
    DogInterface dogContract = DogInterface(dogInterfaceAddress);
          
    function setDOUG(address _doug) {
        DOUG = _doug;
    }
    
    function dougOfage(uint _age) public view returns(uint) {
        
        uint num =  dogContract.getDougAge(_age);
        return _age+num;
        //   return num;
    }
    
    function uintOfName(bytes32 _name)  returns (uint) {
        
        dogContract.contracts(_name);
        FetchContract(dogInterfaceAddress, msg.sender, _name);
       
    }
    
    // function getTest(string _name) public view returns(string) {
    //     string memory newName = _name ;
    //     DogInterface(DOUG).getDougName(newName);
    //     return newName;
    // }
}


执行结果: 输入图片说明

转载于:https://my.oschina.net/u/3734107/blog/1825823

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值