Ethereum / Solidity 개발자는 Solidity 계약을 Tezos로 마이그레이션하려고합니다.몇 가지 질문에 대한 빛을 비추고 싶었어
-
-
환영합니다,이것을 여러 질문으로 나누면 더 좋을 것입니다.이러한 문제에 대한 일반적인 논의를 위해 Agora/Riot/Reddit이 더 적합합니다.이 사이트의 특정 Q & A에 대해서는 유동성에 대한 첫 번째 질문이 더 많은 의견으로 이어질 것이므로 구체적인 답변을 원하시면 다시 언급 해 주시기 바랍니다.두 번째 질문은 이미 아래 답변을 받았으며이 게시물의 제목을 수정하기로 결정한 경우 가장 적합한 후보입니다.세 번째 질문은 새로운 질문에 적합합니다.Welcome, would be better if you split this up into multiple questions. For general discussion on these issues Agora/Riot/Reddit are better fits. For specific Q&A on this site, your first question on Liquidity will lead more to opinions so please consider restating it if you want a specific answer. The second question has already received an answer below and best candidate if you decide to edit the title of this post. The third one would be great for a new question.
- 1
- 2020-01-10
- cousinit
-
유동성은tezos에서 지원되는 언어가 아닙니다.반면에 SmartPy는 아마도 목록에있을 것입니다.Liquidity is not a supported language in tezos. On the other hand SmartPy should probably be in your list
- 2
- 2020-01-12
- Ezy
-
@Ezy,우리는 developers.tezos.com에 나열된 다른 모든 항목과 함께 Liquidity를 살펴보고 주로 Ligo/Archetype으로 범위를 좁히기 시작했습니다.SmartPyi̶s̶n̶'̶t̶ ̶o̶p̶e̶n̶-̶s̶o̶u̶r̶c̶e̶ ̶y̶e̶t̶ https://medium.com/@SmartPy_io/new-release-for-smartpy-and-smartpy-io-89d11dc5146a ← 예!,다시 목록에 있습니다=)@Ezy, we looked at Liquidity, along with all the others listed on developers.tezos.com, and began narrowing down to mainly Ligo/Archetype. SmartPy i̶s̶n̶'̶t̶ ̶o̶p̶e̶n̶-̶s̶o̶u̶r̶c̶e̶ ̶y̶e̶t̶ https://medium.com/@SmartPy_io/new-release-for-smartpy-and-smartpy-io-89d11dc5146a ← Yay!, it's back on the list =)
- 1
- 2020-01-14
- Justin
-
@Ezy Liquidity는 웹 사이트에서 Dune과 Tezos를 모두 지원한다고 밝힙니다.Tezos에서 지원되지 않는 이유는 무엇입니까?@Ezy Liquidity states on their website that they support both Dune and Tezos. What makes it unsupported for Tezos?
- 0
- 2020-01-14
- Justin
-
유동성의 저자 인 @Justin ocamlpro는 자신의 길을 따르기 위해tezos 프로젝트를 떠났습니다.tezos와 함께 작업하는 것은 적극적으로 유지되지 않으므로tezos에서 컴파일을 중지하는 것은 시간 문제 일뿐입니다.@Justin ocamlpro who is the author of liquidity left the tezos project to follow their own path. It is not actively maintained to work with tezos so it is only a matter of time before it stops compiling on tezos.
- 1
- 2020-01-15
- Ezy
-
4 대답
- 투표
-
- 2020-01-14
4 번 질문에 대한 답변
재사용 및 모듈성
재사용 및 모듈성에 대해 논의합니다.이 중 상속은 여러 메커니즘 중 하나입니다.
- Michelson 에는 호출을 제외하고 코드 재사용 메커니즘이 없습니다. 기존 & quot; 라이브러리 & quot; 직접 계약합니다.
- 내가 이해하는 한 Archetype 에는 사용자 확장이 포함되지 않습니다.
코드 재사용을위한 메커니즘. 작업 (방법과 유사)은
서로 다른 상태 머신간에 공유 (유사
계약). 또한 행동은 서로를 부를 수 없으므로
구성 할 수 없습니다. 상태 머신을 확장하거나
구성. 아키 타입 계약은 하나의 파일로 구성됩니다. 하나,
Archetype은 일반적으로 캡슐화하는 확장 세트를 포함합니다.
signed
와 같은 사용 된 패턴은 액션은 다른 인수의 서명이어야합니다. - LIGO 계약은 사용 된 구문에 관계없이 다음으로 구성됩니다.
기능 세트. 이러한 기능은 재사용 할 수 있으며
모든 기능에서 기대할 수있는 일반적인 구성 가능
재귀를 제외한 언어. 또한 Ligo 컴파일러
입력 계약에서 C 전 처리기 (
cpp
) 를 호출합니다. 사용을 통해 어느 정도의 재사용 및 구성 성을 가능하게합니다.#include
지시문의. 도덕적으로 이것은 포함 된 파일 복사-붙여 넣기 : 당신을 저장할 네임 스페이스가 없습니다 이름 충돌에서. 마지막으로cpp
의 사용은 문서화되지 않았으며 이 메시지에서 다음과 같이 증언 한대로 변경 될 수 있습니다. tezos-dev slack의 #ligo 채널 의 메시지 :
현재 LIGO는 C 전 처리기 cpp와 함께 제공됩니다. 가난한 사람의 모듈 시스템 a la C. 우리가 즉시 그리고 장기적으로 그것을 제거하십시오 [...]
- 마지막으로 실제로 Python 프로그램 인 SmartPy 계약 SmartPy 라이브러리를 사용하여 계약을 구성하고 메타 프로그래밍 수준 의 모든 Python 기능에 즉,계약을 생성하는 코드). 그건, 모듈,클래스 (상속 포함),함수,상위 수준 기능,데코레이터 및 구성.
계약 간 커뮤니케이션
- Michelson 에는 계약 간을 단순화하는 특정 메커니즘이 없습니다.
통신. 다른 계약에 대한 호출은 다음을 통해 수동으로 작성해야합니다.
TRANSFER_TOKENS
지침. 콜백은 다시 인코딩되어야합니다. 연속 전달 스타일 (CPS ) . - LIGO 에도 동일한 보존 조치가 적용됩니다. 및 SmartPy .
- 현재 버전에서 Archetype 은 계약 간 통신을 거의 지원하지 않습니다. 같이
지금까지
전송
code> 명령어, 인수 나 진입 점을 지정할 수 없습니다. 호출 된 계약 (아마도unit
유형의 계약 만 지원 대상). CPS 스타일 코딩을위한 특정 도우미가 없습니다. 그러나 이것은 아래에 베노이 트의 답변 에 표시된 것처럼 향후 버전의 Archetype에서 수정되었습니다.
In response to question 4:
Reuse and modularity
We discuss reuse and modularity, of which inheritance is one of many mechanisms:
- Michelson has no mechanism for code reuse, except for calling existing "library" contracts directly.
- As far as I understand, Archetype includes no user-extendable
mechanisms for code reuse. Actions (akin to methods) cannot be
shared between different state machines (akin to
contracts). Furthermore, actions cannot not call each other, so
cannot be composed. State machines cannot be extended or
composed. Archetypes contracts are composed of one file. However,
Archetype contains a set of extensions, that encapsulate commonly
used patterns such as
signed
, which requires that one argument of an action should be the signature of another argument. - LIGO contracts, irrespective of the syntax used, are composed of
a set of functions. These functions can be reused, and are in
general composable as one would expect from functions in any
language, with exception of recursion. What's more, the Ligo compiler
calls the C preprocessor (
cpp
) on input contracts, which enables a certain degree of reuse and composability through the use of#include
directives. Morally, this is equivalent to copy-pasting the included file: there is no namespacing to save you from name clashes. Finally, the use ofcpp
is undocumented and subject to change, as testified to by this message by the following message on the #ligo channel on the tezos-dev slack:
Currently, LIGO is shipped with the C preprocessor cpp which acts as a poor man's module system a la C. There several reasons why we should get rid of it, both immediately and in the long term [...]
- Finally, SmartPy contracts, which are actually Python programs that use the SmartPy library to construct a contract, have access to all the Python features on the meta-programming level (in other words, the code that generates the contract). That is, modules, classes (with inheritance), functions, high-level functions, decorators and compositions.
Inter-contract communication
- Michelson has no specific mechanisms to simplify inter-contract
communication. Calls to other contracts must be crafted manually through the
TRANSFER_TOKENS
instruction. Callbacks must be encoded (again) manually using continuation-passing style (CPS). - The same holds for LIGO and SmartPy.
- In the current version, Archetype has little support for inter-contract communication. As
far a I can see, there is only the
transfer
instruction, with which it is not possible to specify the argument nor the entry-point of the called contract (presumably, only contracts of typeunit
are supported targets). No specific helpers for coding CPS style. However, this is amended in future versions of Archetype, as indicated by Benoit's answer below.
-
- 2020-01-14
다음은 Archetype 에 대한 Arvid의 답변에 대한 보완입니다.
재사용 및 모듈성
실제로 Archetype의 확장 프로그램 은 계약에 기능을 추가하기위한 재사용 가능한 코드입니다. 예를 들어 역할에서 ' 이전 가능 '확장을 사용하면 계약에 역할을 다른 주소로 이전하는 데 필요한 조치 (예 : 진입 점)
예를 들어 관리자 역할에서 '이전 가능한'확장 프로그램 호출 :
variable admin[%transferable%] role := @tz1iawHeddgggn6P5r5jtq2wDRqcJVksGVSa
2 개의 진입 점
assign_new_admin
및confirm_new_admin
을 생성합니다.디자인 관점에서 우리는 쉽게 읽고 신뢰를 전달할 수 있도록 가능한 한 단일 소스 파일에 계약을 유지하려고 노력했습니다. 예를 들어,대부분의 이더 리움 계약은 일반적으로 상속 메커니즘에 의해 말 그대로 수십 개의 소스 파일로 산산조각이 나고,우리는 스마트 계약이 어떻게 생겼는지와는 정반대라고 생각했습니다.
확장 프로그램은 현재 버전 (0.1.12)에서 아직 사용할 수 없지만 곧 제공 될 예정입니다 (몇 가지pull 요청이 있습니다 ...).
계약 간 커뮤니케이션
Archetype에서 계약 호출에 대한 지원이 있습니다. 예를 들어 다음 Archetype 계약은 KT1RNB9PXsnp7KMkiMrWNMRzPjuefSWojBAm
주소에서 계약을 호출합니다.archetype contract_caller contract contract_called_sig { action set_value (n : int) action add_value (a : int, b : int) } variable c : contract_called_sig = @KT1RNB9PXsnp7KMkiMrWNMRzPjuefSWojBAm action update_value(n : int) { effect { c.set_value(n) } } action add_one(n : int) { effect { c.add_value(n, 2) } }
계약 서명은 contract 키워드와 함께 제공되어야하며 계약 호출은 객체에 대한 메서드 호출과 유사합니다.
이 기능은 개발 브랜치에서 사용할 수 있으며 곧 다음 릴리스에서 사용할 수 있습니다 (일반적으로 몇 주 내에 0.1.13).
Here is a complement to Arvid's answer regarding Archetype:
Reuse and modularity
Indeed Archetype's extensions are reusable codes to add features to a contract. For example, using the 'transferable' extension on a role adds to the contract the necessary actions (ie entry points) to transfer the role to another address.
For example, invoking the 'transferable' extension on an admin role:
variable admin[%transferable%] role := @tz1iawHeddgggn6P5r5jtq2wDRqcJVksGVSa
will generate the two entry points
assign_new_admin
andconfirm_new_admin
.From a design perspective, we have tried to keep the contract in a single source file as much as possible, for ease of reading and trust-carrying purposes. Most of Ethereum's contracts, for example, are usually shattered in literally dozens of source files by inheritance mechanisms, and we thought it was the opposite as what a smart contract should look like.
Extensions are not available yet in the current version (0.1.12) but will be soon (they are a few pull requests away ...).
Inter contract communication
There is support for contract calling in Archetype. For example, the following Archetype contract calls a contract at address KT1RNB9PXsnp7KMkiMrWNMRzPjuefSWojBAm
archetype contract_caller contract contract_called_sig { action set_value (n : int) action add_value (a : int, b : int) } variable c : contract_called_sig = @KT1RNB9PXsnp7KMkiMrWNMRzPjuefSWojBAm action update_value(n : int) { effect { c.set_value(n) } } action add_one(n : int) { effect { c.add_value(n, 2) } }
We see that the contract signature must be provided with the contract keyword and that the call to the contract is similar to invoking a method on an object.
This feature is available in the dev branch and will be available soon in the next release (0.1.13 typically in a couple of weeks).
-
- 2020-01-10
<인용구>Archetype/Ligo는 현재 Michelson이 할 수있는 모든 것을 제공합니까,아니면 둘 중 하나에 제한이 있습니까?
나는 Ligo가 아닌 Michelson에서 가능한 것이 있다면 아마도보고 할 가치가있는 버그 일 것입니다. Ligo 개발자들은 보통 이러한 종류의 문제에 신속하게 답변합니다.
아키타 입은 의도적으로 튜링이 완료되지 않았으며 특히 아키 타입에서 무한 루프를 수행 할 수 없습니다 (제한되지 않은 루프는 LOOP 및 LOOP_LEFT에서 지원됨).
Do Archetype/Ligo provide everything that Michelson can currently do, or are there limitations with either?
I think if something is possible in Michelson and not in Ligo, it is probably a bug worth reporting, the Ligo devs usually quickly answer these kinds of issues.
Archetype however is purposely not Turing complete and in particular you cannot do unbounded loops in Archetype (unbounded loops are supported by the LOOP and LOOP_LEFT).
-
- 2020-01-12
질문 3과 관련하여 @ezy 발언에 이어 SmartPy는 Inline Michelson 템플릿 (현재 https://SmartPy.io/dev ).
여기에서 액세스 할 수 있습니다. https://smartpy.io/dev/index.html?template=inlineMichelson.py .
import smartpy_michelson as mi ... @sp.entry_point def concat(self, params): concat = mi.operator("CONCAT", [sp.TList(sp.TString)], [sp.TString]) self.data.s = concat(["a", "b", "c"]) @sp.entry_point def seq(self, params): self.data.value = abs(mi.seq([mi.ADD(), mi.MUL(), mi.DUP(), mi.MUL()], 15, 16, 17))
With respect to question 3, following @ezy remark, SmartPy has some inlining capabilities including with new opcodes as shown in the Inline Michelson template (of the new version, currently https://SmartPy.io/dev).
It's accessible here: https://smartpy.io/dev/index.html?template=inlineMichelson.py.
import smartpy_michelson as mi ... @sp.entry_point def concat(self, params): concat = mi.operator("CONCAT", [sp.TList(sp.TString)], [sp.TString]) self.data.s = concat(["a", "b", "c"]) @sp.entry_point def seq(self, params): self.data.value = abs(mi.seq([mi.ADD(), mi.MUL(), mi.DUP(), mi.MUL()], 15, 16, 17))
몇 가지 질문에 대한 설명을 듣고 싶었습니다.
Ligo,Archetype 또는 Liquidity 사용 범위를 좁 힙니다.
(또는 새로운 것을 시작할 때 다른 하나를 사용하는 것이 최선입니까?)