Solidity
ERC721 Dapp 不工作,不顯示代幣所有者
所以我正在建構一個 Dapp 來與 ERC721 合約進行互動。到目前為止,我能夠鑄造、轉移和檢查地址餘額。我一直試圖顯示誰擁有哪個令牌(通過他們的令牌 ID)。輸出一直在說
0x
它隨機工作並顯示所有者的地址。控制台沒有顯示任何錯誤。附件是我的程式碼和輸出圖片。提前致謝。
程式碼
<h1>Token Owner</h1> <br><label for "tokenId">Token ID;</label><input type="text" id="tokenId" placeholder="e.g., 03945812"></input> <br><br>Owner is <span type="text" id="wallet"></span> <br><br><button id="check" onclick="App.ownerOf()">Check</button> <br><br>
App.js 程式碼
//App.ownerOf function 5 ownerOf: function(){ //stuck at Checking blockchain info... not throwing an error var self = this; var tokenId = parseInt(document.getElementById("tokenId").value); this.setStatus("Checking Blockchain info..."); var check; ERC721Token.deployed().then(function(instance){ check = instance; return check.ownerOf.call(tokenId,{from: account}); }).then(function(account){ //function(owner) var value; value = account; var account_element = document.getElementById("wallet"); account_element.textContent = value.valueOf(); }).catch(function(e){ console.log(e); self.setStatus("Error checking ticket ID; see log"); }); }
ERC7221BasicToken.sol 程式碼
... function ownerOf(uint256 _tokenId) public view returns (address) { address owner = tokenOwner[_tokenId]; require(owner != address(0)); return owner; }
網頁截圖
再次感謝!現在讓我知道你們是否需要我添加其他內容。
所以我犯了一個愚蠢的錯誤,在我的 HTML 中,我在兩個函式中使用了相同的“id”。我剛剛更改了id,現在正在工作。
看來您正在使用松露(我在松露方面沒有太多經驗)。但是,如果您使用以下程式碼片段,您的任務將完成。在您的情況下無需使用 call 。希望這會幫助你。
ownerOf: function(){ var self = this; var tokenId = parseInt(document.getElementById("tokenId").value); var contractAbi = web3.eth.contract(YourContractABI); var myContract = contractAbi.at(YourContractAddress); myContract.ownerOf(tokenId,function(error,data){ if(data){ //Here Data will be Token Holder address } }); }