Dapp-Development
如果“Ownable”是遷移契約的帳戶,那麼它如何用於授予“使用者”而不是部署者權限?
警告:這裡是新的 dapp 開發人員,所以可能遺漏了一些東西。
對於
openzeppelin-solidity
Ownable
合約,如果在建構子中設置了所有者地址,並且msg.sender
是將合約遷移到網路的帳戶的地址 - 一個簡單的使用者(應該擔任管理員角色)怎麼可能成為所有者?在我的 dapp 中,使用者自己不負責遷移合約。我指的使用者是管理員,因此擁有一個繼承的契約Ownable
是理想的;我只是不確定為什麼所有者的地址需要是遷移契約的人。
owner
儘管按照慣例,它address
代表特權使用者,但在任何方面都沒有什麼特別之處。重要的是,它只有通過契約中的解釋才有意義,通常是這樣的:
require(msg.sender == owner);
通常通過設置
owner
為來引導合約msg.sender
,constructor
因此它具有非空值,因此我們知道部署者(部署合約的他們)可以簽署交易。“部署者”可能是開發人員,而“所有者”通常是發起人,因此將所有權轉移給適當的保管人是例行公事。這通常通過對 的交易來完成
function changeOwner(address newOwner) ...
。由於只有所有者才能轉讓所有權的規則,原始owner
帳戶通常是唯一可以簽署此類交易的帳戶。就像是:
function changeOwner(address newOwner) public onlyOwner ...
向部署者發放固定供應代幣的初始供應也是一個事實上的標準。通常,開發人員不是讚助商(或財務主管),因此將代幣轉移給託管人將是遷移過程的一部分。
精心設計的遷移過程可以使用 truffle 遷移編寫腳本,也可以手動完成。它可能會是這樣的:
- 開發者部署代幣合約(開發者收到總供應量)。
- 開發人員部署眾籌合約(開發人員擔任所有者角色)。
- 開發者將 100% 的代幣從自己轉移到眾籌合約。
- 開發人員將眾售合約的所有權從自己更改為託管人。
- 開發者帳戶沒有令牌,也沒有特權。
- Crowdsale 合約有 100% 的代幣供應在“庫存”中出售。
- 託管人有權啟動/停止眾籌和提取合約收集的 ETH。
當然,定制的餘地很大。
希望能幫助到你。