스마트 계약을 업그레이드하는 방법은 무엇입니까?
3 대답
- 투표
-
- 2019-02-28
lambda
유형의 값은 저장소에 보관되거나 매개 변수 (lambda
또는bytes
로UNPACK
ed),스스로 업그레이드 할 수있는 계약을 작성하는 것이 가능 ... 이것은 항상 의미가있는 것은 아니지만 때때로 유용 할 수 있습니다.예를 들어 초기 메인 넷 계약 중 하나에는 일종의 업그레이드 메커니즘이있는 것으로 보입니다. https://tzscan.io/KT1R3uoZ6W1ZxEwzqtv75Ro7DhVY6UAcxuK2 구성된 소유자는 진입 점 중 하나에 람다를 제공 할 수 있으며,이는 저장소에 배치되고 경우에 따라 계약의 동작을 재정의합니다.
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 code>를 노출합니다.
논리 계약
- 대리 계약에 의해 독점적으로 호출됩니다.
- 각 진입 점 호출은 프록시 계약에서
setData code> 진입 점 호출로 이어집니다.
이론적으로 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 기사 게시 정확히이 주제에 대해 최근에.
Cryptonomic published an article on exactly this topic recently.
저는 서명 된 문서의 색인 (실제 문서의 경우ipfs를 가리킴)과 같은 스마트 계약을 구축하고 있습니다.
앞으로
app
에 일부 기능을 추가하고 계약을 업그레이드해야하는 경우 어떻게하나요?새 계약을해야한다는 것을 알고 있지만 이전 계약의 현재 상태를 새 계약으로 이전하는 것은 어떻습니까?
큰 상태로 새 계약을 초기화하는 데 많은 XTZ 비용이 듭니까?이를 달성하기위한 다른 접근 방식이 있습니까?