1
1
import {
2
2
AccountUpdate ,
3
- Bool ,
4
3
Field ,
5
4
MerkleTree ,
6
5
Mina ,
7
6
PrivateKey ,
8
- Signature ,
9
7
UInt64
10
8
} from "o1js" ;
11
- import { HumanIDWitness , Signatures , authenticate } from "../humanIDv1" ;
9
+ import { HumanIDWitness } from "../humanIDv1" ;
10
+ import { signHumanIDv1 , truncateHumanIDv1 } from "../humanIDv1.test" ;
12
11
import { Airdrop } from "./Airdrop" ;
13
12
14
13
describe ( 'Example Airdrop zkApp' , ( ) => {
@@ -18,26 +17,6 @@ describe('Example Airdrop zkApp', () => {
18
17
const sender = senderKey . toPublicKey ( ) ;
19
18
const appKey = PrivateKey . random ( ) ;
20
19
const appAddr = appKey . toPublicKey ( ) ;
21
- const id1 = Field ( 1 ) ;
22
- const id2 = Field ( 2 ) ;
23
- const privKey1 = PrivateKey . fromBigInt ( 1n ) ;
24
- const privKey2 = PrivateKey . fromBigInt ( 2n ) ;
25
- const privKey3 = PrivateKey . fromBigInt ( 3n ) ;
26
- const sigs = new Signatures ( {
27
- sig1 : Signature . create ( privKey1 , [ Field ( 100 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
28
- sig2 : Signature . create ( privKey2 , [ Field ( 100 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
29
- sig3 : Signature . create ( privKey3 , [ Field ( 100 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] )
30
- } ) ;
31
- const sigs1 = new Signatures ( {
32
- sig1 : Signature . create ( privKey1 , [ id1 , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
33
- sig2 : Signature . create ( privKey2 , [ id1 , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
34
- sig3 : Signature . create ( privKey3 , [ id1 , sender . x . add ( sender . isOdd . toField ( ) ) ] )
35
- } ) ;
36
- const sigs2 = new Signatures ( {
37
- sig1 : Signature . create ( privKey1 , [ id2 , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
38
- sig2 : Signature . create ( privKey2 , [ id2 , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
39
- sig3 : Signature . create ( privKey3 , [ id2 , sender . x . add ( sender . isOdd . toField ( ) ) ] )
40
- } ) ;
41
20
let tree : MerkleTree ;
42
21
let app : Airdrop ;
43
22
@@ -52,6 +31,13 @@ describe('Example Airdrop zkApp', () => {
52
31
local . addAccount ( sender , "100000000000" ) ;
53
32
} ) ) ;
54
33
34
+ const getWitnessAndInsert = ( humanIDv1Key : bigint ) => {
35
+ const truncated = truncateHumanIDv1 ( humanIDv1Key ) ;
36
+ const witness = new HumanIDWitness ( tree . getWitness ( truncated ) ) ;
37
+ tree . setLeaf ( truncated , Field ( 1 ) ) ;
38
+ return witness ;
39
+ }
40
+
55
41
const fundZkApp = ( ) => Mina . transaction ( sender , async ( ) => {
56
42
let senderUpdate = AccountUpdate . create ( sender ) ;
57
43
senderUpdate . requireSignature ( ) ;
@@ -65,11 +51,6 @@ describe('Example Airdrop zkApp', () => {
65
51
} ) . then ( ( txn ) => txn . prove ( ) )
66
52
. then ( ( txn ) => txn . sign ( [ deployerKey , appKey ] ) . send ( ) )
67
53
68
- it ( 'should verify signatures' , ( ) => {
69
- authenticate ( id1 , sigs1 , sender ) ;
70
- authenticate ( id2 , sigs2 , sender ) ;
71
- } )
72
-
73
54
it ( 'should deploy the app and fund it' , async ( ) => {
74
55
await deploy ( ) ;
75
56
await fundZkApp ( ) ;
@@ -81,7 +62,7 @@ describe('Example Airdrop zkApp', () => {
81
62
await fundZkApp ( )
82
63
83
64
await Mina . transaction ( sender , ( ) => {
84
- return app . claimReward ( Field ( 100 ) , sigs , new HumanIDWitness ( tree . getWitness ( 100n ) ) ) ;
65
+ return app . claimReward ( ... signHumanIDv1 ( 100n , sender ) , getWitnessAndInsert ( 100n ) ) ;
85
66
} ) . then ( ( txn ) => txn . prove ( ) )
86
67
. then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ;
87
68
} ) ;
@@ -91,31 +72,17 @@ describe('Example Airdrop zkApp', () => {
91
72
await fundZkApp ( ) ;
92
73
93
74
const id1 = 123123123123123123123123123123n ;
94
- const truncatedId1 = id1 & 0xFFFFFFFFn ;
95
- const sigsTest1 = new Signatures ( {
96
- sig1 : Signature . create ( privKey1 , [ Field ( id1 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
97
- sig2 : Signature . create ( privKey2 , [ Field ( id1 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
98
- sig3 : Signature . create ( privKey3 , [ Field ( id1 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] )
99
- } ) ;
100
75
await Mina . transaction (
101
76
sender ,
102
- ( ) => app . claimReward ( Field ( id1 ) , sigsTest1 , new HumanIDWitness ( tree . getWitness ( truncatedId1 ) ) )
77
+ ( ) => app . claimReward ( ... signHumanIDv1 ( id1 , sender ) , getWitnessAndInsert ( id1 ) )
103
78
)
104
79
. then ( ( txn ) => txn . prove ( ) )
105
80
. then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ;
106
81
107
- tree . setLeaf ( truncatedId1 , Field ( 1 ) ) ;
108
-
109
82
const id2 = 123123123123123123123123123124n ;
110
- const truncatedId2 = id2 & 0xFFFFFFFFn ;
111
- const sigsTest2 = new Signatures ( {
112
- sig1 : Signature . create ( privKey1 , [ Field ( id2 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
113
- sig2 : Signature . create ( privKey2 , [ Field ( id2 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
114
- sig3 : Signature . create ( privKey3 , [ Field ( id2 ) , sender . x . add ( sender . isOdd . toField ( ) ) ] )
115
- } ) ;
116
83
await Mina . transaction (
117
84
sender ,
118
- ( ) => app . claimReward ( Field ( id2 ) , sigsTest2 , new HumanIDWitness ( tree . getWitness ( truncatedId2 ) ) )
85
+ ( ) => app . claimReward ( ... signHumanIDv1 ( id2 , sender ) , getWitnessAndInsert ( id2 ) )
119
86
)
120
87
. then ( ( txn ) => txn . prove ( ) )
121
88
. then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ;
@@ -125,35 +92,30 @@ describe('Example Airdrop zkApp', () => {
125
92
await deploy ( ) ;
126
93
await fundZkApp ( ) ;
127
94
128
- const sigsTest3 = new Signatures ( {
129
- sig1 : Signature . create ( privKey1 , [ Field ( 123123123123123n ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
130
- sig2 : Signature . create ( privKey2 , [ Field ( 123123123123123n ) , sender . x . add ( sender . isOdd . toField ( ) ) ] ) ,
131
- sig3 : Signature . create ( privKey3 , [ Field ( 123123123123123n ) , sender . x . add ( sender . isOdd . toField ( ) ) ] )
132
- } ) ;
133
- await expect ( ( ) => Mina . transaction (
95
+ const id = 123123123123123123123123123124n ;
96
+ expect ( ( ) => Mina . transaction (
134
97
sender ,
135
- ( ) => app . claimReward ( Field ( 123123123123123n ) , sigsTest3 , new HumanIDWitness ( tree . getWitness ( 100n ) ) )
98
+ ( ) => app . claimReward ( ... signHumanIDv1 ( id , sender ) , getWitnessAndInsert ( 100n ) )
136
99
)
137
100
. then ( ( txn ) => txn . prove ( ) )
138
- . then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ) . rejects . toThrow ( / d o e s n o t m a t c h t h e w i t n e s s / ) ;
101
+ . then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ) . rejects . toThrow ( / d o e s n o t m a t c h / ) ;
139
102
} )
140
103
141
104
it ( 'should not let double claimReward()' , async ( ) => {
142
105
await deploy ( ) ;
143
106
await fundZkApp ( ) ;
144
107
108
+ const id = 123123123123123123123123123123n ;
145
109
await Mina . transaction (
146
110
sender ,
147
- ( ) => app . claimReward ( Field ( 100 ) , sigs , new HumanIDWitness ( tree . getWitness ( 100n ) ) )
111
+ ( ) => app . claimReward ( ... signHumanIDv1 ( id , sender ) , getWitnessAndInsert ( id ) )
148
112
)
149
113
. then ( ( txn ) => txn . prove ( ) )
150
114
. then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ;
151
115
152
- tree . setLeaf ( 100n , Field ( 1 ) ) ;
153
-
154
- await expect ( ( ) => Mina . transaction (
116
+ expect ( ( ) => Mina . transaction (
155
117
sender ,
156
- ( ) => app . claimReward ( Field ( 100 ) , sigs , new HumanIDWitness ( tree . getWitness ( 100n ) ) )
118
+ ( ) => app . claimReward ( ... signHumanIDv1 ( id , sender ) , getWitnessAndInsert ( id ) )
157
119
)
158
120
. then ( ( txn ) => txn . prove ( ) )
159
121
. then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ) . rejects . toThrow ( / a l r e a d y e x i s t s / ) ;
@@ -167,7 +129,7 @@ describe('Example Airdrop zkApp', () => {
167
129
168
130
await Mina . transaction (
169
131
sender ,
170
- ( ) => app . claimReward ( Field ( 100 ) , sigs , new HumanIDWitness ( tree . getWitness ( 100n ) ) )
132
+ ( ) => app . claimReward ( ... signHumanIDv1 ( 100n , sender ) , getWitnessAndInsert ( 100n ) )
171
133
)
172
134
. then ( ( txn ) => txn . prove ( ) )
173
135
. then ( ( txn ) => txn . sign ( [ senderKey ] ) . send ( ) ) ;
0 commit comments