Dapp-Development

如果“Ownable”是遷移契約的帳戶,那麼它如何用於授予“使用者”而不是部署者權限?

  • March 1, 2019

警告:這裡是新的 dapp 開發人員,所以可能遺漏了一些東西。

對於openzeppelin-solidity Ownable合約,如果在建構子中設置了所有者地址,並且msg.sender是將合約遷移到網路的帳戶的地址 - 一個簡單的使用者(應該擔任管理員角色)怎麼可能成為所有者?在我的 dapp 中,使用者自己不負責遷移合約。我指的使用者是管理員,因此擁有一個繼承的契約Ownable是理想的;我只是不確定為什麼所有者的地址需要是遷移契約的人。

owner儘管按照慣例,它address代表特權使用者,但在任何方面都沒有什麼特別之處。重要的是,它只有通過契約中的解釋才有意義,通常是這樣的:

require(msg.sender == owner);

通常通過設置owner為來引導合約msg.senderconstructor因此它具有非空值,因此我們知道部署者(部署合約的他們)可以簽署交易。

“部署者”可能是開發人員,而“所有者”通常是發起人,因此將所有權轉移給適當的保管人是例行公事。這通常通過對 的交易來完成function changeOwner(address newOwner) ...。由於只有所有者才能轉讓所有權的規則,原始owner帳戶通常是唯一可以簽署此類交易的帳戶。就像是:

function changeOwner(address newOwner) public onlyOwner ...

向部署者發放固定供應代幣的初始供應也是一個事實上的標準。通常,開發人員不是讚助商(或財務主管),因此將代幣轉移給託管人將是遷移過程的一部分。

精心設計的遷移過程可以使用 truffle 遷移編寫腳本,也可以手動完成。它可能會是這樣的:

  1. 開發者部署代幣合約(開發者收到總供應量)。
  2. 開發人員部署眾籌合約(開發人員擔任所有者角色)。
  3. 開發者將 100% 的代幣從自己轉移到眾籌合約。
  4. 開發人員將眾售合約的所有權從自己更改為託管人。
  5. 開發者帳戶沒有令牌,也沒有特權。
  6. Crowdsale 合約有 100% 的代幣供應在“庫存”中出售。
  7. 託管人有權啟動/停止眾籌和提取合約收集的 ETH。

當然,定制的餘地很大。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/67781