スマートコントラクトをアップグレードする方法は?
3 回答
- 投票
-
- 2019-02-28
タイプ
lambda
の値はストレージに保持するか、パラメーターとして(lambda
またはbytes
としてUNPACK
ed)、自分自身をアップグレードできる契約を書くことは可能です...これは常に意味があるとは限りませんが、役に立つ場合もあります.たとえば、非常に初期のメインネット契約の1つには、一種のアップグレードメカニズムがあるようです. https://tzscan.io/KT1R3uoZ6W1ZxEwzqtv75Ro7DhVY6UAcxuK2 .設定された所有者は、エントリポイントの1つにラムダを提供できます.ラムダはストレージに配置され、場合によってはコントラクトの動作を上書きします.
Because values of type
lambda
can be kept in storage or passed as parameters (either aslambda
or asbytes
to beUNPACK
ed), it is possible to write contracts which can upgrade themselves... This won't always make sense, but might sometimes be useful.For example, one of the very early mainnet contracts appears to have a kind of upgrade mechanism: https://tzscan.io/KT1R3uoZ6W1ZxEwzqtv75Ro7DhVY6UAcxuK2. The configured owner can supply a lambda to one of the entry points, which will be placed in storage and will override the contract's behavior in some cases.
-
- 2019-02-26
免責事項:これは教育目的の単なる例であり、本番環境では使用しないでください.
これは、流動性スマートコントラクトのかなり原始的なアップグレード可能な設計です:
プロキシ契約
- 状態/ストレージを保持します
- ロジックコントラクトをポイントし、そのエントリポイントをプロキシします
- 正当な所有者が修正/アップグレードできます.ここで分散化/ガバナンスの問題が発生する可能性があります.基になるロジックコントラクトの変更はすべてオンチェーンで追跡されるため、トレードオフになります.
- ストレージの変更を適用するためにロジックコントラクトによって消費されるエントリポイント
setData
を公開します
論理契約
- 代理契約によって独占的に呼び出されます
- 各エントリポイント呼び出しは、プロキシコントラクトで
setData
エントリポイント呼び出しになります
理論的には、Liquidityの「モジュールのような契約システム」.上記がうまく機能するためには、適切なACL(誰がどのエントリポイントを呼び出すことができるか)を注意深く実装する必要があります.
Disclaimer: This is just an example for educational purposes, don't use it in production.
Here is a fairly primitive upgradable design for a Liquidity smart contract:
Proxy Contract
- Holds the state / storage
- Points to a Logic Contract, and proxies its entry points
- Can be amended / upgraded, by its rightful owner. You can run into decentralization / governance issues here - all the underlying logic contract changes are still tracked on-chain, so it's a trade-off.
- Exposes an entry point
setData
, consumed by the Logic Contract to apply storage changes
Logic Contract
- Is called exclusively by the Proxy Contract
- Each entry point call, results into a
setData
entry point call on the Proxy Contract
In theory, you should be able to implement this using Liquidity's 'module-like contract system'. For the above described to work well, you must carefully implement a decent ACL (who can call which entry points).
-
- 2019-07-29
暗号化
記事を公開最近まさにこのトピックについて. Cryptonomic published an article on exactly this topic recently.
署名されたドキュメントのインデックスのようなスマートコントラクトを構築しています(実際のドキュメントのipfsを指しています).
将来的に
app
に機能を追加したいので、契約をアップグレードする必要がある場合はどうすればよいですか?新しい契約を結ぶ必要があることは理解していますが、古い契約の現在の状態を新しい契約に移行するのはどうですか?
新しい契約を大きな状態で初期化するには、多くのXTZが必要ですか?これを達成するための別のアプローチはありますか?