mirror of
https://github.com/anoma/juvix.git
synced 2024-12-11 08:25:46 +03:00
Enable Anoma compilation resource machine builtin tests (#3208)
This PR: * Updates the anomalib nock stdlib to the latest head of `artem/juvix-node-integration-v0.28` containing the latest testnet fixes. * Re-enables the Anoma resource machine builtins tests
This commit is contained in:
parent
fcd59c9664
commit
9210e39dc7
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -26,7 +26,7 @@ env:
|
||||
SKIP: ormolu,format-juvix-files,typecheck-juvix-examples
|
||||
CAIRO_VM_VERSION: 06e8ddbfa14eef85f56c4d7b7631c17c9b0a248e
|
||||
RISC0_VM_VERSION: v1.0.1
|
||||
ANOMA_VERSION: f52cd44235f35a907c22c428ce1fdf3237c97927
|
||||
ANOMA_VERSION: 44dbbd0376ef15731c8f69988905af23a65fceff
|
||||
JUST_ARGS: runtimeCcArg=$CC runtimeLibtoolArg=$LIBTOOL
|
||||
STACK_BUILD_ARGS: --pedantic -j4 --ghc-options=-j
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
@ -250,7 +250,7 @@ classify AnomaTest {..} = case _anomaTestNum of
|
||||
82 -> ClassWorking
|
||||
83 -> ClassWorking
|
||||
84 -> ClassWorking
|
||||
85 -> ClassNodeError
|
||||
85 -> ClassWorking
|
||||
86 -> ClassExpectedFail
|
||||
_ -> error "non-exhaustive test classification"
|
||||
|
||||
@ -1039,14 +1039,13 @@ allTests =
|
||||
85
|
||||
AnomaTestModeNodeOnly
|
||||
"Anoma Resource Machine builtins"
|
||||
$(mkRelDir ".")
|
||||
$(mkRelFile "test085.juvix")
|
||||
$(mkRelDir "test085")
|
||||
$(mkRelFile "delta.juvix")
|
||||
[]
|
||||
$ checkOutput
|
||||
[ [nock| [[[11 22] 110] 0] |],
|
||||
[nock| [10 11] |],
|
||||
[nock| 478793196187462788804451 |],
|
||||
[nock| 418565088612 |],
|
||||
[ [nock| 0 |],
|
||||
[nock| 0 |],
|
||||
[nock| 0 |],
|
||||
[nock| 0 |]
|
||||
],
|
||||
mkAnomaTest
|
||||
|
@ -4,5 +4,5 @@ import PackageDescription.V2 open;
|
||||
|
||||
package : Package :=
|
||||
defaultPackage@?{
|
||||
name := "positive"
|
||||
name := "positive";
|
||||
};
|
||||
|
@ -1,92 +0,0 @@
|
||||
module test085;
|
||||
|
||||
import Stdlib.Prelude open;
|
||||
import Stdlib.Debug.Trace open;
|
||||
|
||||
-- This definition does not match the spec. For testing purposes only
|
||||
builtin anoma-resource
|
||||
type Resource :=
|
||||
mkResource@{
|
||||
label : Nat;
|
||||
logic : Nat;
|
||||
ephemeral : Bool;
|
||||
quantity : Nat;
|
||||
data : Pair Nat Nat;
|
||||
nullifier-key : Nat;
|
||||
nonce : Nat;
|
||||
rseed : Nat
|
||||
};
|
||||
|
||||
mkResource' (label logic : Nat) {quantity : Nat := 0} : Resource :=
|
||||
mkResource@{
|
||||
label;
|
||||
logic;
|
||||
ephemeral := false;
|
||||
quantity;
|
||||
data := 0, 0;
|
||||
nullifier-key := 0;
|
||||
nonce := 0;
|
||||
rseed := 0
|
||||
};
|
||||
|
||||
-- This definition does not match the spec. For testing purposes only
|
||||
builtin anoma-action
|
||||
type Action := mkAction Nat;
|
||||
|
||||
builtin anoma-delta
|
||||
axiom Delta : Type;
|
||||
|
||||
builtin anoma-kind
|
||||
axiom Kind : Type;
|
||||
|
||||
builtin anoma-resource-commitment
|
||||
axiom commitment : Resource -> Nat;
|
||||
|
||||
builtin anoma-resource-nullifier
|
||||
axiom nullifier : Resource -> Nat;
|
||||
|
||||
builtin anoma-resource-kind
|
||||
axiom kind : Resource -> Kind;
|
||||
|
||||
builtin anoma-resource-delta
|
||||
axiom resourceDelta : Resource -> Delta;
|
||||
|
||||
builtin anoma-action-delta
|
||||
axiom actionDelta : Action -> Delta;
|
||||
|
||||
builtin anoma-actions-delta
|
||||
axiom actionsDelta : List Action -> Delta;
|
||||
|
||||
builtin anoma-prove-action
|
||||
axiom proveAction : Action -> Nat;
|
||||
|
||||
builtin anoma-prove-delta
|
||||
axiom proveDelta : Delta -> Nat;
|
||||
|
||||
builtin anoma-zero-delta
|
||||
axiom zeroDelta : Delta;
|
||||
|
||||
builtin anoma-add-delta
|
||||
axiom addDelta : Delta -> Delta -> Delta;
|
||||
|
||||
builtin anoma-sub-delta
|
||||
axiom subDelta : Delta -> Delta -> Delta;
|
||||
|
||||
main : Delta :=
|
||||
trace
|
||||
(resourceDelta
|
||||
mkResource'@{
|
||||
label := 11;
|
||||
logic := 22;
|
||||
quantity := 55
|
||||
})
|
||||
>-> trace (commitment (mkResource' 0 0))
|
||||
>-> trace (nullifier (mkResource' 0 0))
|
||||
>-> trace (actionDelta (mkAction 0))
|
||||
>-> trace (actionsDelta [mkAction 0])
|
||||
>-> trace (addDelta zeroDelta zeroDelta)
|
||||
>-> trace (subDelta zeroDelta zeroDelta)
|
||||
>-> trace (kind (mkResource' 10 11))
|
||||
>-> trace (proveAction (mkAction 0))
|
||||
>-> trace (proveDelta zeroDelta)
|
||||
>-> zeroDelta;
|
9
tests/Anoma/Compilation/positive/test085/Package.juvix
Normal file
9
tests/Anoma/Compilation/positive/test085/Package.juvix
Normal file
@ -0,0 +1,9 @@
|
||||
module Package;
|
||||
|
||||
import PackageDescription.V2 open;
|
||||
|
||||
package : Package :=
|
||||
defaultPackage@?{
|
||||
name := "test085";
|
||||
dependencies := [defaultStdlib; path "client/"];
|
||||
};
|
@ -0,0 +1,8 @@
|
||||
module Package;
|
||||
|
||||
import PackageDescription.V2 open;
|
||||
|
||||
package : Package :=
|
||||
defaultPackage@?{
|
||||
name := "addtransaction";
|
||||
};
|
@ -0,0 +1,130 @@
|
||||
--- A rendering of https://github.com/anoma/anoma/blob/f52cd44235f35a907c22c428ce1fdf3237c97927/hoon/resource-machine.hoon
|
||||
module ResourceMachine;
|
||||
|
||||
import Stdlib.Prelude open;
|
||||
|
||||
module Resource;
|
||||
|
||||
Resource-Logic : Type := Public-Inputs -> Private-Inputs -> Bool;
|
||||
|
||||
builtin anoma-resource
|
||||
type Resource :=
|
||||
mkResource@{
|
||||
label : Nat;
|
||||
logic : Resource-Logic;
|
||||
ephemeral : Bool;
|
||||
quantity : Nat;
|
||||
data : Pair Nat Nat;
|
||||
--- 256 bits
|
||||
nullifier-key : Nat;
|
||||
--- nonce for commitments 256 bits
|
||||
nonce : Nat;
|
||||
rseed : Nat;
|
||||
};
|
||||
|
||||
positive
|
||||
type Public-Inputs :=
|
||||
mkPublic-Inputs@{
|
||||
commitments : List Nat;
|
||||
nullifiers : List Nat;
|
||||
--- exactly one commitment or nullifier
|
||||
self-tag : Nat;
|
||||
other-public : Nat;
|
||||
};
|
||||
|
||||
positive
|
||||
type Private-Inputs :=
|
||||
mkPrivate-Inputs@{
|
||||
committed-resources : List Resource;
|
||||
nullified-resources : List Resource;
|
||||
other-private : Nat;
|
||||
};
|
||||
|
||||
end;
|
||||
|
||||
open Resource using {
|
||||
Resource;
|
||||
mkResource;
|
||||
Resource-Logic;
|
||||
Public-Inputs;
|
||||
mkPublic-Inputs;
|
||||
Private-Inputs;
|
||||
mkPrivate-Inputs;
|
||||
} public;
|
||||
|
||||
builtin anoma-delta
|
||||
axiom Delta : Type;
|
||||
|
||||
builtin anoma-kind
|
||||
axiom Kind : Type;
|
||||
|
||||
builtin anoma-resource-commitment
|
||||
axiom commitment : Resource -> Nat;
|
||||
|
||||
builtin anoma-resource-nullifier
|
||||
axiom nullifier : Resource -> Nat;
|
||||
|
||||
builtin anoma-resource-kind
|
||||
axiom kind : Resource -> Kind;
|
||||
|
||||
builtin anoma-resource-delta
|
||||
axiom resource-delta : Resource -> Delta;
|
||||
|
||||
type Logic-Proof : Type :=
|
||||
mkLogicProof@{
|
||||
resource : Resource;
|
||||
inputs : Pair Public-Inputs Private-Inputs;
|
||||
};
|
||||
|
||||
Compliance-Proof : Type := Nat;
|
||||
|
||||
type Proof :=
|
||||
| proofCompliance
|
||||
| proofLogic Resource (Pair Public-Inputs Private-Inputs);
|
||||
|
||||
mkProofCompliance (_ : Compliance-Proof) : Proof := proofCompliance;
|
||||
|
||||
mkProofLogic
|
||||
(resource : Resource) (inputs : Pair Public-Inputs Private-Inputs) : Proof :=
|
||||
proofLogic resource inputs;
|
||||
|
||||
builtin anoma-action
|
||||
type Action :=
|
||||
mkAction@{
|
||||
commitments : List Nat;
|
||||
nullifiers : List Nat;
|
||||
proofs : List Proof;
|
||||
app-data : Nat;
|
||||
};
|
||||
|
||||
builtin anoma-action-delta
|
||||
axiom actionDelta : Action -> Delta;
|
||||
|
||||
builtin anoma-actions-delta
|
||||
axiom actionsDelta : List Action -> Delta;
|
||||
|
||||
builtin anoma-prove-action
|
||||
axiom proveAction : Action -> Nat;
|
||||
|
||||
builtin anoma-prove-delta
|
||||
axiom proveDelta : Delta -> Nat;
|
||||
|
||||
builtin anoma-zero-delta
|
||||
axiom zeroDelta : Delta;
|
||||
|
||||
builtin anoma-add-delta
|
||||
axiom addDelta : Delta -> Delta -> Delta;
|
||||
|
||||
builtin anoma-sub-delta
|
||||
axiom subDelta : Delta -> Delta -> Delta;
|
||||
|
||||
Commitment-Root : Type := Nat;
|
||||
|
||||
type Transaction :=
|
||||
mkTransaction@{
|
||||
--- root set for spent resources
|
||||
roots : List Commitment-Root;
|
||||
actions : List Action;
|
||||
delta : Delta;
|
||||
delta-proof : Nat;
|
||||
};
|
40
tests/Anoma/Compilation/positive/test085/delta.juvix
Normal file
40
tests/Anoma/Compilation/positive/test085/delta.juvix
Normal file
@ -0,0 +1,40 @@
|
||||
module delta;
|
||||
|
||||
import Stdlib.Prelude open;
|
||||
import Stdlib.Debug.Trace open;
|
||||
import ResourceMachine open;
|
||||
|
||||
main : Delta :=
|
||||
let
|
||||
resource : Resource :=
|
||||
mkResource@{
|
||||
label := 11;
|
||||
logic := \{_ _ := true};
|
||||
ephemeral := true;
|
||||
quantity := 55;
|
||||
data := 0, 0;
|
||||
nullifier-key := 0;
|
||||
nonce := 0;
|
||||
rseed := 0;
|
||||
};
|
||||
action : Action :=
|
||||
mkAction@{
|
||||
commitments := [];
|
||||
nullifiers := [];
|
||||
proofs := [];
|
||||
app-data := 1;
|
||||
};
|
||||
in -- Most of these call return large nouns that are not appropritate for testing.
|
||||
-- This test checks that these functions do not crash.
|
||||
commitment
|
||||
resource
|
||||
>-> nullifier resource
|
||||
>-> kind resource
|
||||
>-> addDelta (resource-delta resource) (resource-delta resource)
|
||||
>-> addDelta (resource-delta resource) (resource-delta resource)
|
||||
>-> proveDelta zeroDelta
|
||||
>-> trace (subDelta zeroDelta zeroDelta)
|
||||
>-> trace (addDelta zeroDelta zeroDelta)
|
||||
>-> proveAction action
|
||||
>-> trace (actionDelta action)
|
||||
>-> actionsDelta [action];
|
Loading…
Reference in New Issue
Block a user