Solidity
如何使用 truffle 控制台查看已部署的“StandardToken”合約所有者
我已經使用具有以下建構子的 ERC20 令牌部署了 testrpc 合約:
pragma solidity ^0.4.4; import 'zeppelin-solidity/contracts/token/StandardToken.sol'; contract TutorialToken is StandardToken { string public name = 'TutorialToken'; string public symbol = 'TT'; uint public decimals = 2; uint public INITIAL_SUPPLY = 12000; function TotorialToken() { totalSupply = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; } }
我的理解是合約將由第 0 個 testrpc 帳戶部署。但是,當我這樣做時
TutorialToken.deployed().then(c => c.balanceOf('<0th account addr>').then(b => console.log(b)))
它顯示
{ [String: '0'] s: 1, e: 0, c: [ 0 ] }
因此,該帳戶似乎沒有餘額。我也看不到元遮罩的“令牌”選項卡中的餘額。似乎使用了其他地址來創建帳戶。但是我找不到任何功能來查看誰是契約創建者(誰是
msg.sender
)。是否可以在 truffle 控制台中查看誰是合約創建者?
更新
平衡的問題是由於錯字:建構子名稱而
TotorialToken
不是TutorialToken
.最初的問題仍然存在:如何列印契約所有者?
更新#2
要真正看到契約所有者,我可以這樣做(感謝 pabloruiz55 的建議):
address owner; function TutorialToken() { owner = msg.sender; ... }
這樣可行。所以我想我的問題是不同的:OpenZeppelin 的
StandardToken
containsowner
欄位是否可以訪問?
對StandardToken的檢查顯示如下繼承層次結構:
ERC20Basic / \ ERC20 BasicToken \ / StandardToken
在每個契約中包含以下欄位:
StandardToken: mapping (address => mapping (address => uint256)) allowed ERC20: none BasicToken: mapping(address => uint256) balances ERC20Basic: uint totalSupply
為了擁有
owner
財產契約,應該延長Ownable契約(感謝 Ismael 的提示):contract TutorialToken is StandardToken, Ownable { ... }
最簡單的方法是在部署時將合約的所有者/創建者儲存在狀態變數中。
pragma solidity ^0.4.8; contract myContract { address public owner; function myContract() { owner = msg.sender; } }