![](/img/trans.png)
[英]How to create a erc20 token generator where the account address creating contract is the token holder of unique erc20 contract address?
[英]How does a User account own an ERC20 Token
圖片在地址 0x2 上部署了一個眾籌智能合約。 地址為 0x01 的用戶購買了代幣。 這是我對發生的事情的理解:
現在我的問題是:如果 0x1 是用戶帳戶(而不是智能合約),則地址 0x1 處沒有代碼。 我以為一個用戶帳戶只包含一個地址 + 與該地址相關聯的以太幣,它怎么還可以存儲 0x1 擁有 ERC20 令牌的事實呢? 例如,我可以登錄到 MetaMask 並且(在單擊“添加令牌”選項之前)MetaMask 可以看到我有一個令牌……這怎么可能?
每個 ERC20 合約都具有以下功能:
function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; }
您的錢包只需使用您的地址從已知的代幣合約中調用此函數。 因為它是一個視圖函數,所以它不消耗任何 gas。
我發現大多數 ERC20 代幣會很快添加到 Metamask 或 MEW 等錢包中。 但是如果你的余額沒有自動顯示,你可以手動添加合約地址(至少在 MEW 中,不確定 Metamask),它會在之后顯示。
在 Solidity 中,有兩種方法可以獲取發送交易的人的地址
tx.origin
msg.sender
在您的示例中,在ERC20 Token.sol
內的方法中,值tx.origin
將為0x1
,而msg.sender
將為0x2
因此,要回答您的問題,ERC20 代幣如何知道0x2
是:這取決於代幣合約的編寫方式以及它使用的是tx.origin
還是msg.sender
。 我想它會使用msg.sender
,因為這是更普遍的一種。
如果它確實使用msg.sender
,您仍然可以通過首先購買代幣然后立即將代幣從眾籌合同轉移給調用者來使眾籌合同生效。
有關詳細信息,請參閱“msg.sender”和“tx.origin”之間有什么區別?
它如何存儲 0x1 擁有 ERC20 令牌這一事實?
代幣轉移,或一般會計中的轉移,都保存在賬本中。 在這種情況下,分類賬是 ERC-20 智能合約,它在內部保持余額誰擁有以及balances
映射中的內容。 或者,智能合約管理保存所有權記錄的存儲(EVM SSTORE
指令)。
請注意,其他一些區塊鏈,如 Telos 和 EOS(以及 mayne Solana)可能是相反的,並且存儲在用戶帳戶上維護(用戶帳戶具有關聯的 RAM 和用戶擁有的任何令牌的表)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.