Verificación formal de los contratos inteligentes de Tezos
2 respuestas
- votos
-
- 2019-01-31
Siestamos de acuerdoen queelpropósito de los análisisesprobarpropiedades y ayudar a los usuarios de contratosinteligentes a comprenderlas,diría:
- Valores:estudiar qué valorespuedetomar cadaelemento del almacenamientoen elfuturo.
- Efectos:estudiar quéefectospueden ocurriren elfuturo:normalmente,quétransferenciaspueden ocurrir yen qué condiciones.
- Propiedad: quiénpuede activar un cambioen quéparte del almacenamiento.
If we agree that the purpose of analyses is to both prove properties and help users of smart contracts to understand them, I would say:
- Values: studying what values each element of the storage can take in the future.
- Effects: studying what effects can occur in the future: typically what transfers can occur and on what conditions.
- Ownership: who can trigger a change on what part of the storage.
-
Una versiónbastante larga deesta respuesta: https://link.medium.com/ru9idRDePUA rather long version of this answer: https://link.medium.com/ru9idRDePU
- 2
- 2019-03-06
- FFF
-
- 2019-01-31
Así queestaes unagranpregunta y creo que haymuchaspersonasmás calificadas que yo,pero ofreceré unaguíainicial.
En Software Foundations,un libro sobre Coq,se habla de un lenguajeimplícito llamado Imp. Imptiene una sintaxis como:
Z ::= X;; Y ::= 1;; WHILE ~(Z = 0) DO Y ::= Y * Z;; Z ::= Z - 1 END
Lo que deberíaentendersefácilmente como una asignación y unbucle simple.
::=
espara asignación,un ciclo while hasta que zes 0. En Pythonesto sería:def foo(x): z = x y = 1 while z != 0: y = y * z z -= 1
A continuación,podemos definirparte de la lógica subyacente de los símbolos. Porejemplo,
Fixpoint aeval (a : aexp) : nat := match a with | ANum n ⇒ n | APlus a1 a2 ⇒ (aeval a1) + (aeval a2) | AMinus a1 a2 ⇒ (aeval a1) - (aeval a2) | AMult a1 a2 ⇒ (aeval a1) * (aeval a2) end.
Esto definirá las operaciones aritméticas.
Tambiénpuede analizarpalabras reservadas,como:
Inductive com : Type := | CSkip | CBreak (* <--- NEW *) | CAss (x : string) (a : aexp) | CSeq (c1 c2 : com) | CIf (b : bexp) (c1 c2 : com) | CWhile (b : bexp) (c : com).
Luego,podría asignarelprograma aestostipos definidosen Coq,como:
CSeq (CAss Z X) (CSeq (CAss Y (S O)) (CWhile (BNot (BEq Z O)) (CSeq (CAss Y (AMult Y Z)) (CAss Z (AMinus Z (S O))))))
Entoncespodemos hacer algunaspruebas sobre lasfunciones o declaraciones hechasen este lenguaje usando lógicaformal. Aquí hay unejemplo que demuestra que si znoes 4,entonces xnoes 2:
Example ceval_example1: empty_st =[ X ::= 2;; TEST X ≤ 1 THEN Y ::= 3 ELSE Z ::= 4 FI ]⇒ (Z !-> 4 ; X !-> 2). Proof. (* We must supply the intermediate state *) apply E_Seq with (X !-> 2). - (* assignment command *) apply E_Ass. reflexivity. - (* if command *) apply E_IfFalse. reflexivity. apply E_Ass. reflexivity. Qed.
Por ahora,espero que la aplicación a un contratointeligente sea algoevidente. Sipudiera abstraerel contratointeligenteen Coq,podría usar Coqparaprobar rigurosamente algunos componentes de su contratointeligente. Tambiénexiste laposibilidad de describir las condiciones de un contratointeligenteen Coq y compilarlopara Michelson,peroesaes solo unaposibilidad yno he vistoningunaevidencia de su construcción.
ref: https://softwarefoundations.cis.upenn.edu/lf- current/Imp.html
So this is a huge question and I think there are many people more qualified than me, but I'll offer some initial guidance.
In Software Foundations, a book on Coq, they talk about an implied language called Imp. Imp has a syntax like:
Z ::= X;; Y ::= 1;; WHILE ~(Z = 0) DO Y ::= Y * Z;; Z ::= Z - 1 END
Which should be somewhat easily understood as assignment and some simple looping.
::=
is for assignment, a while loop until z is 0. In python this would be:def foo(x): z = x y = 1 while z != 0: y = y * z z -= 1
We can then define some of the underlying logic for the symbols. For example,
Fixpoint aeval (a : aexp) : nat := match a with | ANum n ⇒ n | APlus a1 a2 ⇒ (aeval a1) + (aeval a2) | AMinus a1 a2 ⇒ (aeval a1) - (aeval a2) | AMult a1 a2 ⇒ (aeval a1) * (aeval a2) end.
This will define arithmetic operations.
You could also parse out reserved words, like:
Inductive com : Type := | CSkip | CBreak (* <--- NEW *) | CAss (x : string) (a : aexp) | CSeq (c1 c2 : com) | CIf (b : bexp) (c1 c2 : com) | CWhile (b : bexp) (c : com).
Then you could map the program to these defined types in Coq, like:
CSeq (CAss Z X) (CSeq (CAss Y (S O)) (CWhile (BNot (BEq Z O)) (CSeq (CAss Y (AMult Y Z)) (CAss Z (AMinus Z (S O))))))
We can then make some proofs about the functions or statements made in this language using formal logic. Here is an example proving that if z is not 4, then x is not 2:
Example ceval_example1: empty_st =[ X ::= 2;; TEST X ≤ 1 THEN Y ::= 3 ELSE Z ::= 4 FI ]⇒ (Z !-> 4 ; X !-> 2). Proof. (* We must supply the intermediate state *) apply E_Seq with (X !-> 2). - (* assignment command *) apply E_Ass. reflexivity. - (* if command *) apply E_IfFalse. reflexivity. apply E_Ass. reflexivity. Qed.
By now I hope the application to a smart contract is somewhat apparent. If you could abstract the smart contract into Coq, you could use Coq to prove some components of your smart contract rigorously. There is also potential to outline conditions of a smart contract in Coq and compile it to Michelson, but that's just a possibility and I haven't seen any evidence of its construction.
ref: https://softwarefoundations.cis.upenn.edu/lf-current/Imp.html
-
Graciaspor la respuesta detallada.Parece queme estáexplicando unaestrategia de * cómo * hacer que los contratosinteligentes sean susceptibles de análisisformal,aquí utilizando Coq.Supongo quemi pregunta se centrómásen quétipo de resultados/garantías seencuentranen laintersección de lo que sepuede lograrmedianteel análisisestático y lo que se desea desde laperspectiva de una aplicación deblockchain.Thanks for the detailed answer. It seems you are explaining to me a strategy of *how* to make smart contracts amenable to formal analysis, here by using Coq. I guess my question was more focused on what sorts of results/guarantees are at the intersection of of what is achieveable by static analysis and desireable from a blockchain application perspective.
- 0
- 2019-01-31
- Ezy
-
siesaes lapregunta,podría simplemente construir unfuzzer.Los contratostienen entradasmuy rígidas,por lo queno sería demasiado difícilprobar una amplia variedad deentradas y ver las respuestas dadas.https://en.wikipedia.org/wiki/Fuzzingif that's the question, you could just build a fuzzer. Contracts have very rigid inputs so it wouldn't be too hard to try a wide variety of inputs and see the responses given. https://en.wikipedia.org/wiki/Fuzzing
- 0
- 2019-02-01
- Rob
-
@Rob Siento que los contratosinteligentes deben viviren unmundo adverso,por lo que las herramientas de depuración simples como losfuzzerspodríanno ser suficientes.@Rob I feel that smart contracts must live in an adversarial world so simple debugging tools such are fuzzers might not be enough.
- 1
- 2019-02-02
- FFF
-
SIEMPREpodría hacermás,pero considerando las restriccionesmuyestrictasen lasentradas,laspruebas defuzz de una variedad de contratos contradictoriosprobablemente cubrirían unagran cantidad deescenariosposibles.Creo que unescenario de honeypot comoel de solidez seríamásfácil deprobar ymás difícil de orquestar,ya quetodas las llamadasexternas ocurren después de lafinalización del contrato.you could ALWAYS do more, but considering the very strict constraints on inputs fuzz testing from a variety of adversarial contracts would probably cover a large number of possible scenarios. I think a honeypot scenario like in solidity would be easier to test for and harder to orchestrate since all external calls happen after the contract's completion.
- 0
- 2019-02-02
- Rob
¿Cuáles son los análisis de los contratosinteligentes de Tezos quepodríanbeneficiarmás a losescritores de dapps?
Para ser claros,por "análisis"me refiero a "análisis deprogramaestático".Consulte,porejemplo, aquí .
Básicamente,laidea sería que antes de comprometer un contratointeligente con la cadena,se realizaría un análisisestáticoen el códigofuente de altonivel o,alternativamente,directamenteen el destino de compilaciónen michelsonparaevaluar variaspropiedades deejecución delprograma./p>