Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
62e2139c
Commit
62e2139c
authored
Feb 24, 2021
by
madengji
Committed by
vipwzw
Sep 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test pass
parent
9b794a19
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
318 additions
and
98 deletions
+318
-98
docker-compose-pre.sh
build/docker-compose-pre.sh
+2
-1
Makefile
plugin/dapp/mix/cmd/Makefile
+4
-0
build.sh
plugin/dapp/mix/cmd/build.sh
+16
-0
Dockerfile
plugin/dapp/mix/cmd/build/Dockerfile
+9
-0
testcase.sh
plugin/dapp/mix/cmd/build/testcase.sh
+172
-0
authorize.go
plugin/dapp/mix/cmd/gnark/circuit/authorize/authorize.go
+2
-2
input
plugin/dapp/mix/cmd/gnark/circuit/authorize/input
+1
-1
input
plugin/dapp/mix/cmd/gnark/circuit/transfer/input/input
+0
-0
transferInput.go
...app/mix/cmd/gnark/circuit/transfer/input/transferInput.go
+1
-1
transferinput_test.go
...ix/cmd/gnark/circuit/transfer/input/transferinput_test.go
+1
-1
input
plugin/dapp/mix/cmd/gnark/circuit/transfer/output/input
+0
-0
transferOutput.go
...p/mix/cmd/gnark/circuit/transfer/output/transferOutput.go
+1
-1
transferOutput_test.go
.../cmd/gnark/circuit/transfer/output/transferOutput_test.go
+1
-1
withdraw.go
plugin/dapp/mix/cmd/gnark/circuit/withdraw/withdraw.go
+5
-0
mix.go
plugin/dapp/mix/commands/mix.go
+11
-50
authorize.go
plugin/dapp/mix/executor/authorize.go
+17
-17
config.go
plugin/dapp/mix/executor/config.go
+5
-1
verify_test.go
plugin/dapp/mix/executor/zksnark/verify_test.go
+7
-5
mix.md
plugin/dapp/mix/mix.md
+3
-0
rpc.go
plugin/dapp/mix/rpc/rpc.go
+1
-4
mix.go
plugin/dapp/mix/wallet/mix.go
+8
-3
mixbizdb.go
plugin/dapp/mix/wallet/mixbizdb.go
+4
-5
mixbizdb_test.go
plugin/dapp/mix/wallet/mixbizdb_test.go
+26
-0
txauth.go
plugin/dapp/mix/wallet/txauth.go
+2
-2
txdeposit.go
plugin/dapp/mix/wallet/txdeposit.go
+1
-1
txtransfer.go
plugin/dapp/mix/wallet/txtransfer.go
+2
-2
util.go
plugin/dapp/mix/wallet/util.go
+12
-0
testcase.sh
plugin/dapp/paracross/cmd/build/testcase.sh
+4
-0
No files found.
build/docker-compose-pre.sh
View file @
62e2139c
...
@@ -47,11 +47,12 @@ function run_dapp() {
...
@@ -47,11 +47,12 @@ function run_dapp() {
mv
docker-compose-metrics.yml docker-compose-paracross.yml
mv
docker-compose-metrics.yml docker-compose-paracross.yml
app
=
"paracross"
app
=
"paracross"
else
else
rm
-rf
"
${
app
}
"
-ci
&&
mkdir
-p
"
${
app
}
"
-ci
&&
cp
./
"
${
app
}
"
/
*
./
"
${
app
}
"
-ci
&&
echo
$?
rm
-rf
"
${
app
}
"
-ci
&&
mkdir
-p
"
${
app
}
"
-ci
&&
cp
-r
./
"
${
app
}
"
/
*
./
"
${
app
}
"
-ci
&&
echo
$?
cp
-n
./
*
./
"
${
app
}
"
-ci
/
&&
echo
$?
cp
-n
./
*
./
"
${
app
}
"
-ci
/
&&
echo
$?
if
[
"
$app
"
==
"paracross"
]
;
then
if
[
"
$app
"
==
"paracross"
]
;
then
cp
-r
dapptest/
"
${
app
}
"
-ci
/
&&
echo
$?
cp
-r
dapptest/
"
${
app
}
"
-ci
/
&&
echo
$?
fi
fi
cd
"
${
app
}
"
-ci
/
&&
pwd
cd
"
${
app
}
"
-ci
/
&&
pwd
fi
fi
...
...
plugin/dapp/mix/cmd/Makefile
0 → 100644
View file @
62e2139c
all
:
chmod
+x ./build.sh
./build.sh
$(OUT)
$(FLAG)
\ No newline at end of file
plugin/dapp/mix/cmd/build.sh
0 → 100755
View file @
62e2139c
#!/usr/bin/env bash
strpwd
=
$(
pwd
)
strcmd
=
${
strpwd
##*dapp/
}
strapp
=
${
strcmd
%/cmd*
}
OUT_DIR
=
"
${
1
}
/
$strapp
"
mkdir
-p
"
${
OUT_DIR
}
"
/gnark
# shellcheck disable=SC2086
cp
./build/
*
"
${
OUT_DIR
}
"
cp
-r
./gnark/circuit
"
${
OUT_DIR
}
"
/gnark
OUT_TESTDIR
=
"
${
1
}
/dapptest/
$strapp
"
mkdir
-p
"
${
OUT_TESTDIR
}
"
cp
./test/
*
"
${
OUT_TESTDIR
}
"
plugin/dapp/mix/cmd/build/Dockerfile
0 → 100644
View file @
62e2139c
FROM
ubuntu:16.04
WORKDIR
/root
COPY
chain33 chain33
COPY
chain33-cli chain33-cli
COPY
chain33.toml chain33*.toml ./
ADD
gnark gnark/
CMD
["/root/chain33", "-f", "/root/chain33.toml"]
plugin/dapp/mix/cmd/build/testcase.sh
0 → 100644
View file @
62e2139c
#!/usr/bin/env bash
#1ks returner
MIX_CLI1
=
"docker exec
${
NODE1
}
/root/chain33-cli "
#1jr authorize
MIX_CLI2
=
"docker exec
${
NODE2
}
/root/chain33-cli "
#1nl receiver
MIX_CLI3
=
"docker exec
${
NODE4
}
/root/chain33-cli "
xsedfix
=
""
if
[
"
$(
uname
)
"
==
"Darwin"
]
;
then
xsedfix
=
".bak"
fi
# shellcheck source=/dev/null
#source test-rpc.sh
function
mix_set_wallet
()
{
echo
"=========== # mix set wallet ============="
#1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
mix_import_wallet
"
${
MIX_CLI1
}
"
"0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b"
"returner"
#1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
mix_import_wallet
"
${
MIX_CLI2
}
"
"0x19c069234f9d3e61135fefbeb7791b149cdf6af536f26bebb310d4cd22c3fee4"
"authorizer"
#1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
mix_import_wallet
"
${
MIX_CLI3
}
"
"0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115"
"receiver1"
#1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
mix_import_key
"
${
MIX_CLI3
}
"
"0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71"
"receiver2"
mix_enable_privacy
}
function
mix_import_wallet
()
{
local
lable
=
$3
echo
"=========== # save seed to wallet ============="
result
=
$(${
1
}
seed save
-p
1314fuzamei
-s
"tortoise main civil member grace happy century convince father cage beach hip maid merry rib"
| jq
".isok"
)
if
[
"
${
result
}
"
=
"false"
]
;
then
echo
"save seed to wallet error seed, result:
${
result
}
"
exit
1
fi
echo
"=========== # unlock wallet ============="
result
=
$(${
1
}
wallet unlock
-p
1314fuzamei
-t
0 | jq
".isok"
)
if
[
"
${
result
}
"
=
"false"
]
;
then
exit
1
fi
echo
"=========== # import private key ============="
echo
"key:
${
2
}
"
result
=
$(${
1
}
account import_key
-k
"
${
2
}
"
-l
"
$lable
"
| jq
".label"
)
if
[
-z
"
${
result
}
"
]
;
then
exit
1
fi
echo
"=========== # wallet status ============="
${
1
}
wallet status
}
function
mix_import_key
()
{
local
lable
=
$3
echo
"=========== # import private key ============="
echo
"key:
${
2
}
"
result
=
$(${
1
}
account import_key
-k
"
${
2
}
"
-l
"
$lable
"
| jq
".label"
)
if
[
-z
"
${
result
}
"
]
;
then
exit
1
fi
}
function
mix_enable_privacy
()
{
${
MIX_CLI1
}
mix wallet
enable
-a
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
${
MIX_CLI2
}
mix wallet
enable
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
${
MIX_CLI3
}
mix wallet
enable
-a
"1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k,1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
}
function
mix_transfer
()
{
echo
"=========== # mix chain transfer ============="
##config mix key
${
CLI
}
send coins transfer
-a
10
-n
transfer
-t
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#authorize
${
CLI
}
send coins transfer
-a
10
-n
transfer
-t
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#receiver
${
CLI
}
send coins transfer
-a
10
-n
transfer
-t
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
${
CLI
}
send coins transfer
-a
10
-n
transfer
-t
1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#receiver key config
#12q
${
CLI
}
send mix config register
-r
6828502228622121242962846647254323777568535293334252387427096385571037136275
-e
fd1383f79872c41d9af716e64f4a72653faff01858a58122d6a8480ae1eafb04
-a
12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#14k
${
CLI
}
send mix config register
-r
19618555102674542426188842632653510836841656859537346801180550073357423415124
-e
001a01b0e39a4e06a6a0470a8436be3d6107ce7312d7c56d41fccb91ffa2031c
-a
14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
-k
CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944
##1ks
${
CLI
}
send mix config register
-r
7922952968605110993699808851901993086405084846049488287958179300126299607225
-e
78e2dd2c33f9cd7a94b69962a164da935e91c3c7fef8cfbf810491a128ef396b
-a
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
-k
0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b
#1jr
${
CLI
}
send mix config register
-r
15841547877266309152336489543198284578462047449743379483021378876113912204480
-e
e5362c31a903cd5522c4b84c324f90e96851292194fdfb33a8a1244bf1bb9f13
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
-k
0x19c069234f9d3e61135fefbeb7791b149cdf6af536f26bebb310d4cd22c3fee4
#1nl
${
CLI
}
send mix config register
-r
1499328046806813717988379826525346013601394010052157072491414645500411978017
-e
0abaa15456580365b90f84f22186f99250f4198f8df7319bcced1606085a1e01
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
-k
0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115
${
CLI
}
send coins send_exec
-a
10
-e
mix
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
##config deposit circuit vk
${
CLI
}
send mix config vk
-c
0
-z
1f8b08000000000000ff6c51795053eb15ff4e7281e0f086f5098ff7221114509692581441b4611111c160559055960b449280240842adb22b8bb2094a0551912aa853d08a452bd2a9a0b6022e55c74e519246a86804b57a04f47612c4ce74fad76fbeb3fc96efb0f509db97c96303186da533c449bbc5b2e4207a3730f90428007f600a09b00204c0946b910f4c2501235166bc449c10284bcf54c881a923842c640ad8006c9a2f98dd0096af1b30c50458be7c2d12e2c814b10158f4725d990d2c1f3760f61360f9f0bfa2408b84f09812dda060b60c2ca11b30a5045842be1609b1640e008081bf8496d23285aea70f1c4268a68c0de025576464262878b9bc8038a9342e844ee6c5cb04eecb5d0304c2a424b18cf6e2f9d112c5ff69f0f6cca604cedc2630070970e6c6b52f421631156c00cedc926e840510ae730bdb66330898436c00ee372b41bcc8e8af62fcff8a5512008020606a0921364c0d0bc0e47fe7b44d60aab5ba553add6ff5ea39ddd2595dedd7cc670eb3003891d17245865896acbd0d1811f285b261f2b55a141e0cb7b2cb5650edb824f244cad4c47a677cb79d9f3af5278f179fceaa06a59e13a140a1e16052f395a5279fe3dd5daf4b7c827f27c3965a8db9c42a568956cd1569b6966b34444bd656dd347cc6e1d5396c7655c9f5e679b762a85bf4d63b6dc6e3683e154f697e9d900d14662bd4cea71f769860daaf9e29ad7e5f4630708c2ffca3dbeb22341067b4bee93adfaa63fbebd588fb6b3f0812b1d1f042e1b5d6e66348d78f979ab3252a5cb8e831a97d193108149aced4bdfbe866f102b3cb9c573f3cd583b8c0a37d6fe391ad13e8c0bd292de84bc9224417f556fb83f4bb9ad17eec513f393a62b7f11e5e0d77e106e7d4cbd1f17ec1314596e21250382a6ee82e81db3cac1cbc6c5a6716f21794e839af0f2e6fb1409e1337356a91c24ce76e68ec3d377d7fad06472a2e5dfce870d1057d068523aedce275e812c95bb7e2674da78142faec8cc3631bcb30dc6cd9dd417ff75a0f9b2637ab0d0a6346d15594f45e31fac3351d5b8da5bd5cffb6d20377da08e61936c4b6a1cf1249596e8c4883662182ebde669272a030e7173762854fcda3d1652235ae6fbbe9306a869e4e9e3c7a60086d565c7137aec997135d58a030f183e9b0d71beb1cecf922d967b7ab780d3a58efda1059ff3210ad8397b9de342fb5060a6704ab948eaa497d0c88c813559e18106268cdcec20df6515de894f1a863ba6b8385cedf49ae6f9b5e627704ae2e6f5c5d3becf80a237f7c78e08972b0131dbb970ac63a0b95406191c86ba86ce6ed760c1f8ebfdc1013b516190ff5a6b0c6f43cfcf1d6b9e9c8a74577bfdec23fe2efe53e71337fc347ead1fec495ce6a9ceaeb332eff94db8c40e7b6557f1fa7010a8befddf68f3d7e5c8d92dc54e9ab8190f14ff9675c3ae6cb5468ec6eb0addbfe70b3cedc33bf7962cde26732c4d223e951c6b41c43db1bc2e78ff45aa1f9be36eaf829f942a0d07695fab9881e2358909fd56568726112853baa944dde45ada8d7f253dbb48745b6eef3d840e1991ddd4e752bfb3568edf95b16e768423dfee374f89e9ea43f44a3b5eb0d5159c9f81aa0f09893af2ad33d7b0be6d8d92efba567340f6d9a0ff5f23a1d2b70e96f060aa5fd7f5611a03086ebfc990afcc11e1f74da5e36ce085a8e575b8cab07bd5bab90ea0a335ac0242502856f72345b64de03121c7bffd387fb862987f19fcec985574e4def442b2b7dffe755c9095ab225bd597eff3a58a1c4c5df63a8a9e7f528d43f62ee961a96e887862396df755c3b6f0714f2df0e0cfb35f956a388256ffdf9b0751ef6ee55e9494d3e37a1e59de97fc38bde294280cd094953d0ebe2e429fa42695aa64cc1d918e21f1b16b8c99ffc270000ffff603a413108060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
##config withdraw vk
${
CLI
}
send mix config vk
-c
1
-z
1f8b08000000000000ff6c51795093671a7f9fe4230d1a15224705c508b845442520ba8a42498c8051ea8180656345fc20c190484850504428208756a11e8834d80d663d285854c6455d0705d68a2e5a0b54915a8ecaacb25e94f5316abf9d2f48776667fffacdfb1cbfe37db83cc29532d95c004114ad5325a4ab3489723a1d981c0214800c985c029c503f60f6b02806663f01c14ac346b52a3e5cb3c5a04f05e61021641af33917804b8bfd46368023f505269f00472a6691102f268f0bc0a1e759cb5ce0487c812920c09188dfa31f8b848898ddd641bf913270427c812922c00911b34888335308001fc8d47432add15b7b3ce0134233c55c80c054bdce10af176d1785c62527c745d089a28d1abf8079b343fd421212541a3a50b48456ebff4f4394399212f8a39bc07c41803f3acebe08f164f67201f8a34bd6110e408cd52dac1bc9e0c7ece3024cf9dd8a5c14ab782f26feafd87e02002007e60021642af32507c0ee7fe7d82630a5ac6e8955f7f77ae9a86ed1882efb354ecc410e003f5691aad7a93489ec6d4040c86fd44f4c0eab45e12187da976e973aabd1609719e9bd7e7e3d862b266ccefdb2d88cfc6de6575b87172c060ac34f788ea76ebcedc42237fb17e3e70e34a278d1bf1fdbbb19fa519074fc68439a5d1661d9d28f4df0ba1a552cc54f7f21394be53307f06ceef449bb1206f720e772e3b46a557713507876f79a28a540198ccf85fab4825f2c4d981677fd9213d40a10247f9d27b3bd61b4b2694f9676c6ce9afa161d25f2e3073687ea50d6973fe540a47e2c728dd75fb6bdae3c0714ba24a698e65d72e8c4ccaf5fa65efea7b01ee70cb62462c87205daad9924fb3ee0761c21d6ac70abac3f68da15231e98fb8af9a02ce52b6c444515efeefa4014c6dd7c9066bce00d143eb333276f2bfabc0a677a78fd1679adfa28ba1b5f4b2ddf9fea43f76f331774a9fc5badeedcae79d5dc0af639843faa4b9eb53ff97339da563de9d1b41e7b8393d3164dfe35d04309140e2b3cebb76524987068e87a073743f402a34abe49bc27a91122372b5aeb5f3cff9d956da7474f53cd3a37172c684f1faea14d6d98a48a5c1814ebf00edd9cb5a6e045d93380c287cbd5bb453b3e2c45bed3706d94a3d20605ce6dd2b1376c2ea27df4acd28e6bfb7389352c50e871bf3da95aba54820de3a06d7b952909a7381dc1757fea35a1f041c599b13d55dd40e1969b8e3197fed1558bd5852edc85e27d0c1e3978b5f2c7ae9f3538ee62d8daa91794df8ca4ed79d46cd8d94e630bf793def696d077d81db9a94c360414baca2abd7c6c6eca81c2ee7ee17c5e5653d2eb8d2dde0ecbb29bf13196c2b0c7e06514cc0ce63fb5ef5efafe14eee54b66c2ed53c518b48a1fb3baf3b010b38e7ee178e77a4a310a9f0c99ff55b8b50428347977f9da3fec50e2e0ca079399882b9e287e53985ef807d88b3e675f1dd605ae1bb29ab33c13edd207ac7d81d3eb6225b6b5eeade86df9587238758c33dafa9bfd1a88e318a05013b03eafa2313319d396f795df3b33e482cb368d3fd6d27bad1f79572ed43f4affa1cefa79364061c8dc5d374c4f7136fec55c10b63d6222852736c4d9449b3df27186d673d58c0fd36380c2f3f93d2b94ab3e6d47c71503b67b8dcdcdf89d7c41fc361551e19c57cfa77f3b58ee4180c28a8b6a1f4d59c30614a5c406145df13e81cb02b79e74ceddf8314e38b628eaa974ee65a0509193974bf6fdfd34bafb6484259794203eef73b50bf85b5617f2440e5bca3c17b4b0643ba3e7f7d59f32f2b06671ac4b6f6b228d3fc4db6cb8630a32be1e0abb5fd7f2f82e5018e3ab769a762e7c32f29ad6dece769e65c2ca239b732c735a0770a2daa971c9cae1cf582ef9f99f024e3f6d4841b3ff8a3da136a78370383bbfeeeeb984669c7ae6966bc67dea3950b87052de573513f30ee2d8f57f7cd46e5155e28e3bf11f7df7ab220067b7f576081a62642c595271d29c299d05fe7877cf47e1272dd96538e6ade55447c5bd12e49bfb5de5c7f75d050a076e693216ef1808c52eb7a28775c1272a5053effab25c7efe6be4bf7998f1b3cfde0984800d2f24596bd0e8f99f44c83e8b0e5f2d1344ea687ab556ab0f8b4b550a430c7aa556a7caa0d76ca1359bd8d2b808835aad4a50d13af645fe130000ffff37a667a7c7060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#transferInput
${
CLI
}
send mix config vk
-c
2
-z
1f8b08000000000000ff6c517b5493e7197f9fe4330404440f8c8a42422a22179504c5212a77b9ca1c8a0b60865c827c02e19614c56820822001b954f0d0dac12c1aaca0c3b276e87003ad50aa6b6147109cad2268c1b3a3526d1f2ef2ed7c41bab39dfef53befef7d9edfe57db93cc2f5670ab800a67be4d974f2215ab13f4c7e08182d010a20109842029c200930652c8a81a92460ba539590462786283255ca1c606a0921f6cc312e00572e96cc6f00c7df0d98e30438fe62160959c314710138720f03cd058e9f1b302504387ee2b72861911021536c1894ccd3c0f17503a69400c757cc2221d6cc0900300a4c93a7cb154ac31d0ff884c8191d17c02b4799ad4a540a0f0b83e2d3d3e323e4fb85090ac9468f754112dfe4645a21f71206c8d394bf70213c32df12f80b9bc09c24c05f18674f84ac62cab900fc8525c30807406a480bd1f31d244c0517c0f6e72861c258d95b33f17fcd2a0900401830a7082102e67d0e80c5ffcfb197c054b3be5506df9ff9ea05dfd2795ff6697ec5d47000f8b1b21c6536add8cffe0d981232b7c897d1b25e142e6af6e935d6d8cd61cdf7cdff76e0e4d9a05e16a5916ad6f7a0a3cbaed43b5e51a781425e62dcadb9e8ebe3d8b22418bf5adca9c6eeadc468f6c131095a7471072ff77b5b1156ad5b5a14533cb2f9188eb5e7eb361cac2ac719937d3fbadbd439a399f16bf23038ef53a030981f531e597e5b837b921f191ddb6b72121f0d3f7ee2a3ef14e0f2b3479bedaf28571bd46897d2c4e17fa95fa2e7dde53f38fd25b406cb9cdeebf774f2f1408b468e9197f9277940e16dbb8f9aaf4c061cc0d6b313d3ae45df8ca2cf8e2d25079c5cd7a24df0d1d9e7e1a56e8418ba369e5fd95171e6ae251e1124b936251558e2c582be5261fda211743d7cd2eee6846537506872a1df66cbd2d9a7582312da4e0aee6bf1d27d37dfef337c8ad021c475e4f21f5ee80ce95a8354b4f55442001eacd58e985d6b3a88fe5fcb4c2e5947b621b874ba5749ea9381c2cb82ca8cb51d32c00c7dcf8e8ffd8ab661c9d10669c37d751d1a999f5ba6d0a77e6850fbb1adbdf0a2ca6f1a07b6a5e4e6df8d6b43cf4aab7f466cef97a1d3e9829aa83a710050282beebe119e17d78f93b156d666b3d513b8bbb05c9f1e3bb909b9f7c26c444d457c62280b1416393ddb69f3a62615a93e7dd9f5a03e3d6ed099a967429385f8ce9343b70519a952a070fcf76543d776b77e8bf196a2de07b18e2948edfd7c9b7756f179b40ed9b4d2b9647a95219f9bf33b7d2513a11dd8f01d8f67de75e0031c2c1e6f1cfeea9b67b83efa9cb82360ac1828bcfebae3ce1ddd9ee7483b7e5b95dd1c3280a27c998cef3d1c83c23bf6fde6d4d0f6b77f9196f0397dffba47014ab33347475ebf6c43dd998a30c7579ba2d0a42c54e03d38bd04283ca199644a9e9a79a2f9253a3a26e06f2e38dbf2d1c8e17d9aade8faeb4c0778e69c694817b9f561fe87499fdae28a3193f192776bafe0b0ddcea9c76d6a7774141eb9e5ae3d320a1436e57ff0e426bfc50ab3cea6aa07a66b291c936ccb718a0a8b43eef81bf7ca99883ac3ebf180c2d01fe20bc73ccf7c8dda6b5dd567ec92bec3fd1bf4014ba29f5e45d1b0ead09acf74536c8b65138385ffd09cc3cd9a2c4dcce52fcfa2bf6050267a9f31416351947702e1e610a0b08eeffc93a568b51e4b2b0657faeea8dd88071b7a476a32f3aa91772a592afe636a3350f82c5f329794e42041b7a15c356f877608d798abb7b72f3f378baeaff42b7cd4faa5ac983dff92f352da548577dfbbb5a5f6f409115aac7bb8d96252dd8b5ccbb512afbdadd640e1859db6bdf57f5fdd8d95c27aaa215c7614a7786a554578fb6d7436b20af36ef9b29c157bf9b1cb8b39e3ed7e183876355c92ebf0190e896ffcb6b1db2a13ad677a7a8c4e658502858f5b2d52ed732fe6a1ffc61789d1f7ce97a1d9c9ab6b8d7f52b4e30ac9bd9681acca47ac5894765237d9d93b8a7e13f417c66273633cdcb5a2986e3c3e8816b1bbde5d5fb9de16a8a9f6b4dd4191766fb0a3e154a324a5fd01dabaf54dcfd85b3248657d11d9b68fb387d572b9a069ca5557dfc074af4fea27ea5b11cb052957b43d03c7d134a2a262d38d3fcb81c2578ffc9e4bf2a55338fad7b69bcfab96756271bcc79f16afd275e1e2ad4deb665dae3610023cb35d29b43c2dc9373d43a5504affe7146d16a14a4ba393697976707c4eca325f953225239bce93efca942b92588aff9b88c0b8df8544069aeece96cb233332942c4bfe130000fffffc0ee3992a070000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#transferOutput
${
CLI
}
send mix config vk
-c
3
-z
1f8b08000000000000ff6c547b50536716ff4e728d49094e902aac2b25561418284b6265456b0b0126a9b441a0f252d749f44682101e49da52dafadaa28020529e858115a4252c56684b812c202882e2545e2b415e5b2ab432c802d62ec7b6787712a43bbbb37ffde69ec7eff19d99cbe610b61f73920dc00fa393d4aa64b5e668209d0ccc2902144000307f26c0928a813967461130d904f87bf5ca58f5e1d735097a9d16987c42c826e6341b804d8bc4cb1bc0f2f304269500cb4f6446425c988fd8002cdacb5266034be209cc59022c89e8198acd488890396319142f9781e5eb094c3a0196afc88c84d8316900b03a20968ea3353a4b8f035c426826830db04bab4bd21fd609538452455c9c424e1f152a35e2ed5e1e52b1af4aa5d6d0bb84fe74aceeff34841f2ca704eeca26305904b82be3e62f429c984c36007765c932c20288b0b885c8e50c62e63c1bc0e1372b81c2fd079f8989fe23964d00000281c9258438321fb30004ff3b676e029363d6bd60d1fdad9eb3a29bbeac6b7e9af54c1e0b80bbffa05697a4d61c35df06f8843ca54e31a7cc5a14da041b3dc38fe893d1bd68cd7b45fc3d9f60ca21eba01d535d7db8e9736f9fe61f7bbe040abdedc33cfeeeb2fd3aaedd20fb2a21284a801dc5ef9cdce130e584eec1a3416f25aed212339b5061dc5cf853210fff3af0fdd9ae7cfb254cc53cb7b62ce60072ab1fc97cdb5dd44061fe9c69d274f7ee43bc3b39ee7efa4e25071f74cca40546d6aec52d9dd9afaeaa98a72d6ce99fdd38a7b93c2dc5a09fa2e21f734edcc687d14386e96e5e02bab97d76252c66dba039c193d129c70fadfc3058e17ff1a8b45f858de336b5af18fe188fb69b5fbe2adfd0b09e104bd69171d3ce2d76c7ac51249973cae9ab7a8aa1ed357bde18591841b70b1a7f6f929808141a2a0d1353857fa251d8b23635c0737d2d963eba979f5becbe03d93e079c43f3bbfd2ceede1f8b6908abf0e6606f5ef174f9b0c71ebc58717ddb588cf4355c77a8bce5fdb7e6b3817ad2f392c475c3874be864b4196bf4aace44e189f4353b1795efe21fb0e54e4f79dda716b289def632b52626054dbb83b503b47320e6f0b92d3f27f5ad46e7fc84840a2ffb10a010db5b55da5733caf0bbcce4accfddfed686036fdffa57c66cca5ab4776dab3ee812694b2c598142d904949e4fda72157b1b0a422fd54725e0f1c9e254d2b4f535a4faaff9a8be9c6d050a8da6e18f6c83671e63e74bdf408bd7e22ebcd2656a7d518feee881b20c87967e7f8bbf2f6e18146431fb38867b47df33197a1df19a42c70bb7126d455e5562bde22b831350e8f32bbcb0affc6d099639476cf478908af8c43740f94f5e57150a871c9d1b7ffca0f9d92916d638d71b06b6cbb1fcfbc6f83cfe994df8c398e0fe778d0dafa0f52f8fabef4d1d9301858f5236c9d21c6bd231f7e0e259d7596515c638077c7b76bd60149fb39a2a5cd774789fc5dde0aafb025bb7bdcd98f886a1cbff8af13452596ee7beadb9d589cf27a5b95ff2534d0385fb4becfe12faf505131a8f501bad861417b1c7e1eb2f26877367706382aa3fe2e3f91f2caf4701858e92b6ebc3739eae38d465ad97dce774e0e5c1e7e607136df4c8d19e96ffce376c16281c523e38ff5eddd0250c3d73eb1f51ca251facf41a7d31ece13bd7705de9bae3a50571e6df26c69b5ab39aea6ffbe0af45754319cd521e3649be495dbab14f82ae25937505a3215781c23ba3f6328da0a50175a6f1859bb135724cfb545ef0a6a05b8c9bc34b9e6f4ffafd5333995dce4db5edeee893b87afef0f82a63248d052c7e9155de81636823d08470593b7940e12f56535d99b75dfc708ba3b16d589bfa2e86744bd419d5b39d68dd1023b53bd68a66b285ddfe7bc7dade2c44d89d6c1715a45160b4d04b30d2d73987fc8ee49f8d2fbb4e0085f2dac292a6cbf30ef809727827cab65662c3ccc99108a5fd6ae476dc0cdd16fe42252140598746abe9d823be71f17a8d2e822b8fd7d1328536fabfca91dc2079c0a1f0d74302c8bf030000ffff9d91ce826b060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
#auth
${
CLI
}
send mix config vk
-c
4
-z
1f8b08000000000000ff6c517b5493e7197f9fe403a2244a89c14b0563a5e014038905d6c2985c82040aa21525440a09fd80b41069122617071228144cc7451438a0a5038695035527a52d475bb9163a540e058a041d7a86b6bb7070b43e22f8ed24883b67677ffdce73fb5dde976d4dd8814c1e1b807b88d6aa1333d59aa4303a131803010a400a4c0101d65e093046338a812923c08d4c57a5a813649ab474bd0e98338490ad4c3e1b804d8b25cb17c00af400a690002b506c4642b6331fb00158b497a5cd06568007301f126005889fa3c48c84089922cba264b90d2c7f0f604a08b0fcc56624643d530c0036d2143a95d6e82d336be010423327d9003e3abd363d412fcc16ee55a6a62a23e824a14a23f1f412ed95f82726aa35b48f30884ed1ff9f81f0f7cb2981b37209cc1f087056d6cd1521cecc476c00ceca91658505106d710bf2e50c12a6940de0f8c24a985011fb5c4cfc5fb132020010064c2521640b738a0560f7bf7be621301566dd728bee8b7ec58a6ec9b2aef9691c98d32c008e2256a7d7aa3549e6bf012e21cf282363306b5118fb679b70c65eb006efb5ec7a6974d5e4437c1297e8a7fec06a003746482f1a868cb5402137f2f6dcdfbc459fa3a05738683a55398c395b68b746db81dfe1b6f315aaa95fadca2466b63f5dea8e709705b7e398527cf17a505701cef86528ae66707fc2d5f762a90dc73aff0a1446554fe78d1e79f019ce04c4bf54f686751b86a4c7e617ebfb3dd1a9f88bc1463baf1c0b5bc30f616e63cefd3b51b4fb84d27d47ef26bcb5b150b42dc1251c9d4d8f96ee44178e01858ced46e6b45ed58b4c42ab5b50c3d231d40e70e4df45bdd68cbcfe62df94bb5f9f25c49255e9e7f115dcec13e0ccf0b3ace18e605f8c979d130ae6eab2d12935f4ec178ff9ae40e1c87b335622bfbe494c9edb961b3fbb781c3b568dcf1d715c47a395cef434c406ab2cee40341a2ff07b7301f97b0c9ddffa38aec3beede24cf8542b44a1c2747891e7c0070a5f6db3af1b7f1c33886bd639f27ed42aa5989bbbfbead933dddd08edfb474e464a7658d81cd67b7b8eb95251a8735e78ddb7f2181f8d8dce7db32f3ff91cb9b19d3155139e52a0b07fa75c7b0ba01303c603123e5c25edc656438bb0e13da72728c8f9aae469505632b184050a559afb4e891e833fe342fe081e9a14cc62c5eaf56151c5a79ee206eb7d2dbe46d525a0f0daab293e25312379d874f11f3fa97efee33738f17ebda9c6e43087ceffba7fc28be3df65f1576e54d72daeb59bc0f2b23d45f3c36bf93814b7f64cb04ea846d748aaa85c96310714264cb754c75c2efd357a15253797650f75e177792107bd3f698ec2cdaf7fefb6e1e1c7d9cfffc2295e21ae6fd26fc7da78d9a8e8b35db7f1df87834b9a7daf10dcc16efae54068da23a030c9aa612afc6a413de6fdd6d028dff04d16ceff5dee68eccdaa439e9b7da8c0b7966d71f7b2cb5d4dfec9f5ad989adc546d15a309c54db5edaec777f730b8e617dbe145d5e34ca0d0601b0a6bc2d2687c67a6a4a370e1c2252cf0fea72eeaae0720af27ffcb736e824396d7a380426dd6c0ce0677661ef7dd7cffa3d4a567720c1f9c3454664ef5a0b5c1d1e6c175f770a0b0be9fc9589db3b30d5f2b4b87894f67af63c638cfe85a937502d9d5a7fb5ca6276e10a070da46596ebdfffb3bf86eeb95e4a9c24d6bd121f42fbf91f9bcd2846e76fca984523a1828bc5daa38f8b6a2cb154bf7a5bc7bfee3a4b7f1789ef79dcd3d7b6f20e7c1919bbee73debcc64eeafd86ebd1c7dad035d3e71bc2ff48aa23174f78f6fd484b4c4a0dd46d3b74bf6f90e40e11679f38d1a7957048aee756cbe35f1e665346d2d75e7ebeb8690dd32aab810b62bd54c1677ae86efb43d7a1e9302d3f4171eb669b17d8f8b3da31a8bc6cd8955bcafdb3bae01854185dc7581c16f65e2123720e34bc9fe2bf8a8e307595b6f6e155a456eaa2fe7e74a08018ae79fae4f3eaa5567d1214a5db2fd8beaad345af38eb9c53da8a5e903478feacd05675f8434eeb0ec8094fc270000ffff6794568075060000
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
}
function
mix_deposit
()
{
hash
=
$(${
CLI
}
send mix deposit
-m
1000000000
-p
./gnark/circuit/deposit/
-t
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
-r
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
-k
4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
)
echo
"
${
hash
}
"
query_tx
"
${
CLI
}
"
"
${
hash
}
"
${
MIX_CLI1
}
mix wallet notes
-a
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
${
MIX_CLI2
}
mix wallet notes
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
${
MIX_CLI3
}
mix wallet notes
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
noteReturn
=
$(${
MIX_CLI1
}
mix wallet notes
-a
1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 | jq
-r
".notes[0].noteHash"
)
noteAuth
=
$(${
MIX_CLI1
}
mix wallet notes
-a
1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR | jq
-r
".notes[0].noteHash"
)
notePeer
=
$(${
MIX_CLI1
}
mix wallet notes
-a
1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k | jq
-r
".notes[0].noteHash"
)
# hash=$(${CLI} send mix deposit -m 1000000000 -p ./gnark/circuit/deposit/ -t 1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k -a 1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR -r 1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4 -k 4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01)
# echo "${hash}"
# query_tx "${1}" "${hash}"
# ${MIX_CLI2} send mix auth -n 5631471018742471897033294565915884019145970028744895604889956301276708177410 -a 7922952968605110993699808851901993086405084846049488287958179300126299607225 -p ./gnark/circuit/authorize/ -k 4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01
}
function
query_tx
()
{
block_wait
"
${
1
}
"
1
local times
=
200
while
true
;
do
ret
=
$(${
1
}
tx query
-s
"
${
2
}
"
| jq
-r
".tx.hash"
)
echo
"query hash is
${
2
}
, return
${
ret
}
"
if
[
"
${
ret
}
"
!=
"
${
2
}
"
]
;
then
block_wait
"
${
1
}
"
1
times
=
$((
times
-
1
))
if
[
$times
-le
0
]
;
then
echo
"query tx=
$2
failed"
exit
1
fi
else
echo
"query tx=
$2
success"
break
fi
done
}
function
mix_test
()
{
echo
"=========== # mix chain test ============="
mix_deposit
}
function
mix
()
{
if
[
"
${
2
}
"
==
"init"
]
;
then
echo
"mix init"
elif
[
"
${
2
}
"
==
"config"
]
;
then
mix_set_wallet
mix_transfer
elif
[
"
${
2
}
"
==
"test"
]
then
mix_test
"
${
1
}
"
fi
}
plugin/dapp/mix/cmd/gnark/circuit/authorize/authorize.go
View file @
62e2139c
...
@@ -17,7 +17,6 @@ func main() {
...
@@ -17,7 +17,6 @@ func main() {
/*
/*
public:
public:
treeRootHash
treeRootHash
authorizePubKey
authorizeHash(=hash(authpubkey+noterandom))
authorizeHash(=hash(authpubkey+noterandom))
authorizeSpendHash(=hash(spendpub+value+noterandom))
authorizeSpendHash(=hash(spendpub+value+noterandom))
...
@@ -25,6 +24,7 @@ private:
...
@@ -25,6 +24,7 @@ private:
amount
amount
receiverPubKey
receiverPubKey
returnPubKey
returnPubKey
authorizePubKey
authorizePriKey
authorizePriKey
spendFlag
spendFlag
noteRandom
noteRandom
...
@@ -47,7 +47,7 @@ func NewAuth() *frontend.R1CS {
...
@@ -47,7 +47,7 @@ func NewAuth() *frontend.R1CS {
authorizePriKey
:=
circuit
.
SECRET_INPUT
(
"AuthorizePriKey"
)
authorizePriKey
:=
circuit
.
SECRET_INPUT
(
"AuthorizePriKey"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"NoteRandom"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"NoteRandom"
)
authPubKey
:=
circuit
.
PUBLIC
_INPUT
(
"AuthorizePubKey"
)
authPubKey
:=
circuit
.
SECRET
_INPUT
(
"AuthorizePubKey"
)
authorizeHash
:=
circuit
.
PUBLIC_INPUT
(
"AuthorizeHash"
)
authorizeHash
:=
circuit
.
PUBLIC_INPUT
(
"AuthorizeHash"
)
// hash function
// hash function
...
...
plugin/dapp/mix/cmd/gnark/circuit/authorize/input
View file @
62e2139c
public, TreeRootHash,10531321614990797034921282585661869614556487056951485265320464926630499341310
public, TreeRootHash,10531321614990797034921282585661869614556487056951485265320464926630499341310
public, AuthorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
public, AuthorizeHash,1267825436937766239630340333349685320927256968591056373125946583184548355070
public, AuthorizeHash,1267825436937766239630340333349685320927256968591056373125946583184548355070
public, AuthorizeSpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
public, AuthorizeSpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
...
@@ -7,6 +6,7 @@ public, AuthorizeSpendHash,14468512365438613046028281588661351435476168610934165
...
@@ -7,6 +6,7 @@ public, AuthorizeSpendHash,14468512365438613046028281588661351435476168610934165
secret, Amount,28242048
secret, Amount,28242048
secret, ReceiverPubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, ReceiverPubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, ReturnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
secret, ReturnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
public, AuthorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, AuthorizePriKey,17822967620457187568904804290291537271142779717280482398091401115827760898835
secret, AuthorizePriKey,17822967620457187568904804290291537271142779717280482398091401115827760898835
secret, SpendFlag,1
secret, SpendFlag,1
secret, NoteRandom,2824204835
secret, NoteRandom,2824204835
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer
I
nput/input
→
plugin/dapp/mix/cmd/gnark/circuit/transfer
/i
nput/input
View file @
62e2139c
File moved
plugin/dapp/mix/cmd/gnark/circuit/transfer
I
nput/transferInput.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer
/i
nput/transferInput.go
View file @
62e2139c
package
main
package
input
import
(
import
(
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer
I
nput/transferinput_test.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer
/i
nput/transferinput_test.go
View file @
62e2139c
package
main
package
input
import
(
import
(
"testing"
"testing"
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer
O
utput/input
→
plugin/dapp/mix/cmd/gnark/circuit/transfer
/o
utput/input
View file @
62e2139c
File moved
plugin/dapp/mix/cmd/gnark/circuit/transfer
O
utput/transferOutput.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer
/o
utput/transferOutput.go
View file @
62e2139c
package
main
package
output
import
(
import
(
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
util
"github.com/33cn/plugin/plugin/dapp/mix/cmd/gnark/circuit"
...
...
plugin/dapp/mix/cmd/gnark/circuit/transfer
O
utput/transferOutput_test.go
→
plugin/dapp/mix/cmd/gnark/circuit/transfer
/o
utput/transferOutput_test.go
View file @
62e2139c
package
main
package
output
import
(
import
(
"testing"
"testing"
...
...
plugin/dapp/mix/cmd/gnark/circuit/withdraw/withdraw.go
View file @
62e2139c
...
@@ -72,6 +72,11 @@ func NewWithdraw() *frontend.R1CS {
...
@@ -72,6 +72,11 @@ func NewWithdraw() *frontend.R1CS {
targetAuthHash
:=
circuit
.
SELECT
(
authFlag
,
calcAuthHash
,
nullValue
)
targetAuthHash
:=
circuit
.
SELECT
(
authFlag
,
calcAuthHash
,
nullValue
)
circuit
.
MUSTBE_EQ
(
authHash
,
targetAuthHash
)
circuit
.
MUSTBE_EQ
(
authHash
,
targetAuthHash
)
//need check in database if not null
nullifierHash
:=
circuit
.
PUBLIC_INPUT
(
"NullifierHash"
)
calcNullifierHash
:=
mimc
.
Hash
(
&
circuit
,
noteRandom
)
circuit
.
MUSTBE_EQ
(
nullifierHash
,
calcNullifierHash
)
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
//通过merkle tree保证noteHash存在,即便return,auth都是null也是存在的,则可以不经过授权即可消费
//preImage=hash(spendPubkey, returnPubkey,AuthPubkey,spendValue,noteRandom)
//preImage=hash(spendPubkey, returnPubkey,AuthPubkey,spendValue,noteRandom)
noteHash
:=
circuit
.
SECRET_INPUT
(
"NoteHash"
)
noteHash
:=
circuit
.
SECRET_INPUT
(
"NoteHash"
)
...
...
plugin/dapp/mix/commands/mix.go
View file @
62e2139c
...
@@ -160,23 +160,27 @@ func mixConfigPaymentPubKeyParaCmd() *cobra.Command {
...
@@ -160,23 +160,27 @@ func mixConfigPaymentPubKeyParaCmd() *cobra.Command {
}
}
func
addPayPubKeyConfigFlags
(
cmd
*
cobra
.
Command
)
{
func
addPayPubKeyConfigFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"addr"
,
"a"
,
""
,
"register for addr "
)
cmd
.
MarkFlagRequired
(
"addr"
)
cmd
.
Flags
()
.
StringP
(
"receiver"
,
"r"
,
""
,
"receiver key"
)
cmd
.
Flags
()
.
StringP
(
"receiver"
,
"r"
,
""
,
"receiver key"
)
cmd
.
MarkFlagRequired
(
"receiver"
)
cmd
.
MarkFlagRequired
(
"receiver"
)
cmd
.
Flags
()
.
StringP
(
"encryptKey"
,
"
a
"
,
""
,
"encrypt key for secret"
)
cmd
.
Flags
()
.
StringP
(
"encryptKey"
,
"
e
"
,
""
,
"encrypt key for secret"
)
cmd
.
MarkFlagRequired
(
"encryptKey"
)
cmd
.
MarkFlagRequired
(
"encryptKey"
)
}
}
func
createConfigPayPubKey
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
func
createConfigPayPubKey
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
addr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"addr"
)
receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"receiver"
)
receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"receiver"
)
encryptKey
,
_
:=
cmd
.
Flags
()
.
GetString
(
"encryptKey"
)
encryptKey
,
_
:=
cmd
.
Flags
()
.
GetString
(
"encryptKey"
)
payload
:=
&
mixTy
.
MixConfigAction
{}
payload
:=
&
mixTy
.
MixConfigAction
{}
payload
.
Ty
=
mixTy
.
MixConfigType_Payment
payload
.
Ty
=
mixTy
.
MixConfigType_Payment
payload
.
Value
=
&
mixTy
.
MixConfigAction_PaymentKey
{
PaymentKey
:
&
mixTy
.
PaymentKey
{
ReceiverKey
:
receiver
,
EncryptKey
:
encryptKey
}}
payload
.
Value
=
&
mixTy
.
MixConfigAction_PaymentKey
{
PaymentKey
:
&
mixTy
.
PaymentKey
{
Addr
:
addr
,
ReceiverKey
:
receiver
,
EncryptKey
:
encryptKey
}}
params
:=
&
rpctypes
.
CreateTxIn
{
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
getRealExecName
(
paraName
,
mixTy
.
MixX
),
Execer
:
getRealExecName
(
paraName
,
mixTy
.
MixX
),
...
@@ -362,8 +366,8 @@ func showMixTxs(cmd *cobra.Command, args []string) {
...
@@ -362,8 +366,8 @@ func showMixTxs(cmd *cobra.Command, args []string) {
// ShowProposalBoardCmd 显示提案查询信息
// ShowProposalBoardCmd 显示提案查询信息
func
ShowPaymentPubKeyCmd
()
*
cobra
.
Command
{
func
ShowPaymentPubKeyCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"
rcvkey
"
,
Use
:
"
peer
"
,
Short
:
"
show
peer addr receive key info"
,
Short
:
"
get
peer addr receive key info"
,
Run
:
showPayment
,
Run
:
showPayment
,
}
}
addShowPaymentflags
(
cmd
)
addShowPaymentflags
(
cmd
)
...
@@ -411,7 +415,7 @@ func WalletCmd() *cobra.Command {
...
@@ -411,7 +415,7 @@ func WalletCmd() *cobra.Command {
func
ShowAccountPrivacyInfo
()
*
cobra
.
Command
{
func
ShowAccountPrivacyInfo
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"keys"
,
Use
:
"keys"
,
Short
:
"
show account note privacy keys
"
,
Short
:
"
get account privacy keys for mix note
"
,
Run
:
accountPrivacy
,
Run
:
accountPrivacy
,
}
}
accountPrivacyCmdFlags
(
cmd
)
accountPrivacyCmdFlags
(
cmd
)
...
@@ -421,9 +425,9 @@ func ShowAccountPrivacyInfo() *cobra.Command {
...
@@ -421,9 +425,9 @@ func ShowAccountPrivacyInfo() *cobra.Command {
func
accountPrivacyCmdFlags
(
cmd
*
cobra
.
Command
)
{
func
accountPrivacyCmdFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"addr"
,
"a"
,
""
,
"user wallet addr"
)
cmd
.
Flags
()
.
StringP
(
"addr"
,
"a"
,
""
,
"user wallet addr"
)
cmd
.
Flags
()
.
StringP
(
"priv"
,
"p"
,
""
,
"user wallet privacy key,option"
)
cmd
.
Flags
()
.
StringP
(
"priv"
,
"p"
,
""
,
"user wallet
addr's
privacy key,option"
)
cmd
.
Flags
()
.
Uint32P
(
"detail"
,
"d"
,
0
,
"if get
payment priv
keys,option"
)
cmd
.
Flags
()
.
Uint32P
(
"detail"
,
"d"
,
0
,
"if get
keys' privacy
keys,option"
)
}
}
...
@@ -589,49 +593,6 @@ func SecretCmd() *cobra.Command {
...
@@ -589,49 +593,6 @@ func SecretCmd() *cobra.Command {
return
cmd
return
cmd
}
}
//// EncodeSecretDataCmd get para chain status by height
//func EncodeSecretDataCmd() *cobra.Command {
// cmd := &cobra.Command{
// Use: "raw",
// Short: "raw secret data",
// Run: encodeSecret,
// }
// encodeSecretCmdFlags(cmd)
// return cmd
//}
//
//func encodeSecretCmdFlags(cmd *cobra.Command) {
// cmd.Flags().StringP("receiver", "p", "", "receiver key")
// cmd.MarkFlagRequired("receiver")
//
// cmd.Flags().StringP("return", "r", "", "return key")
//
// cmd.Flags().StringP("authorize", "a", "", "authorize key")
//
// cmd.Flags().StringP("amount", "m", "", "amount")
// cmd.MarkFlagRequired("amount")
//
//}
//func encodeSecret(cmd *cobra.Command, args []string) {
// rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
// receiver, _ := cmd.Flags().GetString("receiver")
// returnKey, _ := cmd.Flags().GetString("return")
// authorize, _ := cmd.Flags().GetString("authorize")
// amount, _ := cmd.Flags().GetString("amount")
//
// req := mixTy.SecretData{
// ReceiverKey: receiver,
// ReturnKey: returnKey,
// AuthorizeKey: authorize,
// Amount: amount,
// }
//
// var res mixTy.EncodedSecretData
// ctx := jsonclient.NewRPCCtx(rpcLaddr, "mix.EncodeSecretData", req, &res)
// ctx.Run()
//}
// EncodeSecretDataCmd get para chain status by height
// EncodeSecretDataCmd get para chain status by height
func
DecodeSecretDataCmd
()
*
cobra
.
Command
{
func
DecodeSecretDataCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
...
...
plugin/dapp/mix/executor/authorize.go
View file @
62e2139c
...
@@ -28,25 +28,25 @@ func (a *action) authParamCheck(input *mixTy.AuthorizePublicInput) error {
...
@@ -28,25 +28,25 @@ func (a *action) authParamCheck(input *mixTy.AuthorizePublicInput) error {
return
errors
.
Wrapf
(
mixTy
.
ErrAuthorizeHashExist
,
"auth=%s"
,
input
.
AuthorizeHash
)
return
errors
.
Wrapf
(
mixTy
.
ErrAuthorizeHashExist
,
"auth=%s"
,
input
.
AuthorizeHash
)
}
}
if
!
isNotFound
(
err
)
{
if
!
isNotFound
(
err
)
{
return
errors
.
Wrapf
(
err
,
"auth=%s"
,
input
.
AuthorizeHash
)
return
errors
.
Wrapf
(
err
,
"
get
auth=%s"
,
input
.
AuthorizeHash
)
}
}
authPubKeys
,
err
:=
a
.
getAuthKeys
()
//
authPubKeys, err := a.getAuthKeys()
if
err
!=
nil
{
//
if err != nil {
return
errors
.
Wrap
(
err
,
"get AuthPubkey"
)
//
return errors.Wrap(err, "get AuthPubkey")
}
//
}
//
//authorize pubkey hash should be configured already
//
//
authorize pubkey hash should be configured already
var
found
bool
//
var found bool
for
_
,
k
:=
range
authPubKeys
.
Keys
{
//
for _, k := range authPubKeys.Keys {
if
input
.
AuthorizePubKey
==
k
{
//
if input.AuthorizePubKey == k {
found
=
true
//
found = true
break
//
break
}
//
}
}
//
}
if
!
found
{
//
if !found {
return
errors
.
Wrapf
(
types
.
ErrNotFound
,
"authPubkey=%s"
,
input
.
AuthorizePubKey
)
//
return errors.Wrapf(types.ErrNotFound, "authPubkey=%s", input.AuthorizePubKey)
}
//
}
return
nil
return
nil
}
}
...
...
plugin/dapp/mix/executor/config.go
View file @
62e2139c
...
@@ -187,9 +187,13 @@ func GetPaymentPubKey(db dbm.KV, addr string) (*mixTy.PaymentKey, error) {
...
@@ -187,9 +187,13 @@ func GetPaymentPubKey(db dbm.KV, addr string) (*mixTy.PaymentKey, error) {
}
}
func
(
a
*
action
)
ConfigPaymentPubKey
(
paykey
*
mixTy
.
PaymentKey
)
(
*
types
.
Receipt
,
error
)
{
func
(
a
*
action
)
ConfigPaymentPubKey
(
paykey
*
mixTy
.
PaymentKey
)
(
*
types
.
Receipt
,
error
)
{
if
paykey
==
nil
||
len
(
paykey
.
ReceiverKey
)
==
0
||
len
(
paykey
.
EncryptKey
)
==
0
{
if
paykey
==
nil
||
len
(
paykey
.
ReceiverKey
)
==
0
||
len
(
paykey
.
EncryptKey
)
==
0
||
len
(
paykey
.
Addr
)
==
0
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"pubkey=%v"
,
paykey
)
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"pubkey=%v"
,
paykey
)
}
}
//检查用户使用对应的addr的key,但不能确保key就是对应addr
if
paykey
.
Addr
!=
a
.
fromaddr
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"register addr=%s not match with sign=%s"
,
paykey
.
Addr
,
a
.
fromaddr
)
}
//直接覆盖
//直接覆盖
return
makeConfigPaymentKeyReceipt
(
&
mixTy
.
PaymentKey
{
return
makeConfigPaymentKeyReceipt
(
&
mixTy
.
PaymentKey
{
Addr
:
a
.
fromaddr
,
Addr
:
a
.
fromaddr
,
...
...
plugin/dapp/mix/executor/zksnark/verify_test.go
View file @
62e2139c
...
@@ -68,10 +68,11 @@ func TestTransferOutput(t *testing.T) {
...
@@ -68,10 +68,11 @@ func TestTransferOutput(t *testing.T) {
}
}
func
TestWithdraw
(
t
*
testing
.
T
)
{
func
TestWithdraw
(
t
*
testing
.
T
)
{
verifyKey
:=
"1f8b08000000000000ff6c517b5493f719febd5f3e4384e8c029d63924729108164de6f0443c6d0232848028172fd888821f102e090b8156aa968bc0542c94702d0c90c65261749d384be4eea04e61a74e14052ad2cb10014f2bede04566bf9d2f4877ce4eff7aceef7d9ff7799ef7f7f2f884e7cd66f00084fb189d3afab85a13a3648e039b498006f001f63401ca570a6c1e8712600b0808f7a44426a8a3fc344929fa64604b0821ebd92c1e008f9148172680f2de026c0e01ca5bc2212162369b0740311ee6320f28af2dc0fe8100e5257989520e0911b1b966a274a10c94620bb06709500a098784ac66cf0080854f0293c868f4e61e1f048430ec391e8067b25e9712a517bd2df23d9a9878743713238ad4487febe1ee2b554447ab358ca7682793a0ff9986e8e4c29620589c04f65d0282453af722c4893dcf03102c0e992914c001735a38b8b08394cde701d8fd1445293aa47a6926f99f5901010050025b4408b1670d1480f5fff3b826b0859cef7b66df9fea858bbe67177cb9afb1658b2900c12155b25ea7d6c470b70121213fd2a7d94cce8bc6c8d7b32c7cfddb0630bdf4c8eb1f24debe80366a8b294ddac6c2b939075d5c7a8133d0f8a16b4067fbb3f41a745a45bb6c73ed3c81e2c293b73ebf77a719372bd33d7b7deb1f124eec9957b83c3037ac166b13c3c8ef9c4a44c86f280afed2309d81769131775a06bade011a1fdfae3999d0ded28b7dd667be91b94b0331e963814b4c84ba1cf9afc50d9ffda778deac36d1eab1dbf051eb2cde1aca7d74adc17e254e573ce936040f1b91ee4bf8a0eda9c206685c527c1355c5c314e6ecb4391e759d76425e7559a431ca0270d96b6c4d73aad35242ccabf635a92fccc7fd26192bbabc4667822e876044d8f4805e5e9685cb96e8a2474def66008daabc89ac6b7b3a2dd0ceed15ef955b2dc370feeba5a6f7af0b53913f251be3cf8f2799d31d3b1a6f0a6ffc4f297e9d13e7f186b473126797f6ae1d6ef9533f0ac24555771f8c25018daf383a7e697da17c08e31fdf13bf78e831830fb2981b21bce28b68f92470d6a55ffe9959ed2f86b74c51233f84e2476959ade22b7b2f627acfd5ef6b4b3f56a3ebb3d46aafdaa27ea0f1fc4ad19f7995cf235056c19806cedd1762aef2b62974dd88161dd6787d72bfa0ed08312f0b3466b7e49e7fbbed9bcff1d54faa43e6f7b51ec3809b37322d9f248b91faacb9efdbbe158fb85bf8ef5ff1d5f3b6fde89bb95fb7aaf9c01a1cd309bf9775fcfa5bb40c5cbe8bfceb618f39df09376163d0a91d5378ea46ecded3b7365fc2adc7cb04bffa7b5634badecbf66efcf7a560a0d1b6c2d031dd196e89f15230fc18a218c6f63341dddbd78729d021dd739d631ef5d5cb5b34add934f95d4b483f1e0aed087ae77ed4619c7f2b3fff4150e02a5ceef785ec1fe3572b80c6aac31dedfe83e3264cf3d1777be5bf21c722f73f7adb16ba3168a7b69f49ec66abcce98e2cdb3837fc62ed288ea6964f3c97877e887e55137b07f784be40fb0d43b2846a9b1d40a3c7e5229135ad6ac581dcb4f1bbb1d627707ae4cefaae99c29be8fe0bab922bd9fd6ee6dfa381c6badad56b3768b7ba61d053c7a694c8996d683c10ee601f6b3c80e2987d39562623c72a55acc92e6a911971245f4f456cefd98bc5073dd7ad6eaba6d0f5a947535ac8e42e02342a9516fe81fd3088f5db263b96d6542a71c5c98d4bcafad3aad15def30e674a5c61168ecf9f460bcb3c47e39ee2a3e82a2ede706d136a0722adeea97025c3e6c6bd52c35aa38b14811dfc2bbaf7e0ae5aa37eb2a9bb57e987338d5d76aea6e1eae4dea72d06cf06f051a0f7d7769deee71463db2f6cedad93ac9efb13c603d4f5e9a7b0d5d7a4bfd3a72fe3ac789cd4ae3a66d3639edc0475f18fd1b368d9e4043cac5f7a33fad50a24bdd7b4362e7d662a0f1e04ebbcd6f76c9f5981ab0ea6f32d5d51e2c6978f58798c6c053e8ec3e77b9c632e23a2140f31589da148d5e18aa639860ad56bfeb6872ac2068b74fc47ebf609f158a147dac56a74e63429218cd31ae47fe1b0000ffff4d389d0e6d060000"
verifyKey
:=
"1f8b08000000000000ff6c51795093671a7f9fe4230d1a15224705c508b845442520ba8a42498c8051ea8180656345fc20c190484850504428208756a11e8834d80d663d285854c6455d0705d68a2e5a0b54915a8ecaacb25e94f5316abf9d2f48776667fffacdfb1cbfe37db83cc29532d95c004114ad5325a4ab3489723a1d981c0214800c985c029c503f60f6b02806663f01c14ac346b52a3e5cb3c5a04f05e61021641af33917804b8bfd46368023f505269f00472a6691102f268f0bc0a1e759cb5ce0487c812920c09188dfa31f8b848898ddd641bf913270427c812922c00911b34888335308001fc8d47432add15b7b3ce0134233c55c80c054bdce10af176d1785c62527c745d089a28d1abf8079b343fd421212541a3a50b48456ebff4f4394399212f8a39bc07c41803f3acebe08f164f67201f8a34bd6110e408cd52dac1bc9e0c7ece3024cf9dd8a5c14ab782f26feafd87e02002007e60021642af32507c0ee7fe7d82630a5ac6e8955f7f77ae9a86ed1882efb354ecc410e003f5691aad7a93489ec6d4040c86fd44f4c0eab45e12187da976e973aabd1609719e9bd7e7e3d862b266ccefdb2d88cfc6de6575b87172c060ac34f788ea76ebcedc42237fb17e3e70e34a278d1bf1fdbbb19fa519074fc68439a5d1661d9d28f4df0ba1a552cc54f7f21394be53307f06ceef449bb1206f720e772e3b46a557713507876f79a28a540198ccf85fab4825f2c4d981677fd9213d40a10247f9d27b3bd61b4b2694f9676c6ce9afa161d25f2e3073687ea50d6973fe540a47e2c728dd75fb6bdae3c0714ba24a698e65d72e8c4ccaf5fa65efea7b01ee70cb62462c87205daad9924fb3ee0761c21d6ac70abac3f68da15231e98fb8af9a02ce52b6c444515efeefa4014c6dd7c9066bce00d143eb333276f2bfabc0a677a78fd1679adfa28ba1b5f4b2ddf9fea43f76f331774a9fc5badeedcae79d5dc0af639843faa4b9eb53ff97339da563de9d1b41e7b8393d3164dfe35d04309140e2b3cebb76524987068e87a073743f402a34abe49bc27a91122372b5aeb5f3cff9d956da7474f53cd3a37172c684f1faea14d6d98a48a5c1814ebf00edd9cb5a6e045d93380c287cbd5bb453b3e2c45bed3706d94a3d20605ce6dd2b1376c2ea27df4acd28e6bfb7389352c50e871bf3da95aba54820de3a06d7b952909a7381dc1757fea35a1f041c599b13d55dd40e1969b8e3197fed1558bd5852edc85e27d0c1e3978b5f2c7ae9f3538ee62d8daa91794df8ca4ed79d46cd8d94e630bf793def696d077d81db9a94c360414baca2abd7c6c6eca81c2ee7ee17c5e5653d2eb8d2dde0ecbb29bf13196c2b0c7e06514cc0ce63fb5ef5efafe14eee54b66c2ed53c518b48a1fb3baf3b010b38e7ee178e77a4a310a9f0c99ff55b8b50428347977f9da3fec50e2e0ca079399882b9e287e53985ef807d88b3e675f1dd605ae1bb29ab33c13edd207ac7d81d3eb6225b6b5eeade86df9587238758c33dafa9bfd1a88e318a05013b03eafa2313319d396f795df3b33e482cb368d3fd6d27bad1f79572ed43f4affa1cefa79364061c8dc5d374c4f7136fec55c10b63d6222852736c4d9449b3df27186d673d58c0fd36380c2f3f93d2b94ab3e6d47c71503b67b8dcdcdf89d7c41fc361551e19c57cfa77f3b58ee4180c28a8b6a1f4d59c30614a5c406145df13e81cb02b79e74ceddf8314e38b628eaa974ee65a0509193974bf6fdfd34bafb6484259794203eef73b50bf85b5617f2440e5bca3c17b4b0643ba3e7f7d59f32f2b06671ac4b6f6b228d3fc4db6cb8630a32be1e0abb5fd7f2f82e5018e3ab769a762e7c32f29ad6dece769e65c2ca239b732c735a0770a2daa971c9cae1cf582ef9f99f024e3f6d4841b3ff8a3da136a78370383bbfeeeeb984669c7ae6966bc67dea3950b87052de573513f30ee2d8f57f7cd46e5155e28e3bf11f7df7ab220067b7f576081a62642c595271d29c299d05fe7877cf47e1272dd96538e6ade55447c5bd12e49bfb5de5c7f75d050a076e693216ef1808c52eb7a28775c1272a5053effab25c7efe6be4bf7998f1b3cfde0984800d2f24596bd0e8f99f44c83e8b0e5f2d1344ea687ab556ab0f8b4b550a430c7aa556a7caa0d76ca1359bd8d2b808835aad4a50d13af645fe130000ffff37a667a7c7060000"
pubInput
:=
"7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
//pubInput := "7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
proof
:=
"1f8b08000000000000ff62666360d6f9dfc8ccc8c81a50949f9fc6f8bf8981919991c9b188f17f0b0323b377513198c1e454ccf8bf83818141e57f3333232387bba1635a5a665e2a4492913182f17f1b0323632488626010ffdfcac8c8c8ee9a939a9b9a5702966263e400696e076b368269ee8069ee8268ee62606050f8dfc9ccc8c8946a04166562647234009bc0e4680831fd1fa3edff264646961f3cb782cffcf57b38f387a99d7c6ee7868c1f3fe4e619b92af066c9fc902ddcff4e74b2f27246961fcd1246476cad8a97ff98d813ff2dedc235b31f6cd613169a1acf32fea1b19e9125be36692503c8b4bf8c2e3b7e7eb698f2e3ee5229cfd3422adb7fec3aef7064554acebb1fba379fbb2d5a9a12c3c8f2635e4991d9a70acd9c1f5b049592aaf8f79dfec1bb559f6182a9ede31ffafd571654fc791bc4c008328ea5ae9af1f906c9fd3f8edddef3dca12f51fcc7612769b3df59672a7fe84e7cc3fe3bf7773523cb8fcd82b9571744a9b9fe58207621f796e6cfb33f625656354c2c78fff9074fd8dfbdda1f2d37831dd7ab5ad5c95b715feb8787c0a367910fbf16fd9855785449cec1d5ff876affba77fc6b773130b2fc90d76177f92a65d7f863d1753ec512a1d2fc1f874c4ef9b21a98f5fd600e8fd5fdf2f3db5206060640000000ffffbe0a8c21f4010000"
//proof := "1f8b08000000000000ff62666360d6f9dfc8ccc8c81a50949f9fc6f8bf8981919991c9b188f17f0b0323b377513198c1e454ccf8bf83818141e57f3333232387bba1635a5a665e2a4492913182f17f1b0323632488626010ffdfcac8c8c8ee9a939a9b9a5702966263e400696e076b368269ee8069ee8268ee62606050f8dfc9ccc8c8946a04166562647234009bc0e4680831fd1fa3edff264646961f3cb782cffcf57b38f387a99d7c6ee7868c1f3fe4e619b92af066c9fc902ddcff4e74b2f27246961fcd1246476cad8a97ff98d813ff2dedc235b31f6cd613169a1acf32fea1b19e9125be36692503c8b4bf8c2e3b7e7eb698f2e3ee5229cfd3422adb7fec3aef7064554acebb1fba379fbb2d5a9a12c3c8f2635e4991d9a70acd9c1f5b049592aaf8f79dfec1bb559f6182a9ede31ffafd571654fc791bc4c008328ea5ae9af1f906c9fd3f8edddef3dca12f51fcc7612769b3df59672a7fe84e7cc3fe3bf7773523cb8fcd82b9571744a9b9fe58207621f796e6cfb33f625656354c2c78fff9074fd8dfbdda1f2d37831dd7ab5ad5c95b715feb8787c0a367910fbf16fd9855785449cec1d5ff876affba77fc6b773130b2fc90d76177f92a65d7f863d1753ec512a1d2fc1f874c4ef9b21a98f5fd600e8fd5fdf2f3db5206060640000000ffffbe0a8c21f4010000"
pubInput
:=
"7b22416d6f756e74223a22333030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a223231303831383737323734333735363138373335313735373439373731303436353038353236303132343834373730373738303137323532353237363930353534343638383234363032303333222c2254726565526f6f7448617368223a223132363130353833363132333930383937343333363935303639393236343830353334333331333038313834303132323934383835373131303534393530343033333937393530343630323936227d"
proof
:=
"1f8b08000000000000ff62666360d6f9dfc8ccc8c81a50949f9fc6f8bf8981919991c9b188f17f0b0323b377513198c1e454ccf8bf83818141e57f3333232387bba1635a5a665e2a4492913182f17f1b0323632488626010ffdfcac8c8c8ee9a939a9b9a5702966263e400696e076b368269ee8069ee8268ee62606050f8dfc9ccc8c8946a04166562647234009bc0e4680831fd1fa3edff264646961fbe01ef7e7c9b2095fec3ff5cd9b4a650fe653f56de9e10c1b2f3fcfb1fba6ca55b1af4f32730b2fc68d3f996a278fc47e18f4be65589afde5cb5fb61b961eb7aeec08f823f84dc4ffc906a35b9c50032ed2bf792b3494c0ae23f026f4ced59f0cf25f787724b689ddae940c11fac5f3d5438a7942431b2fc70e96aad173d3c63ee8ffa1eefe2cd9515313f38b6f04cace4586bfe43dc4f4bd4416195010323c8b89223b3055afe159cfeb1bb45f9ee7ed30a931f2d27bbd5ae2cdab1f987d8d23dcd960eb70f33b2fc30775ea619b9e360d28f0b8a2783d7ab775cfa71e5e6ac673573ae7dfec168a2f3f4c592af2bc08e0bd06c399ca215b6f4c7a58776c21a73ee95ffd8d1e6f4de7e4dda9a1fcaca379ebdad6f156664f9b1ddc665b518a7df841fc7c538664c49f937fb87cbc7b66216b3acf33fb8fd6bb56e2857fa32303000020000fffffbc89ea0f4010000"
rst
,
err
:=
Verify
(
verifyKey
,
proof
,
pubInput
)
rst
,
err
:=
Verify
(
verifyKey
,
proof
,
pubInput
)
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
true
,
rst
)
assert
.
Equal
(
t
,
true
,
rst
)
...
@@ -174,7 +175,8 @@ func TestDeserialDeposit(t *testing.T) {
...
@@ -174,7 +175,8 @@ func TestDeserialDeposit(t *testing.T) {
}
}
func
TestDeserialWithdraw
(
t
*
testing
.
T
)
{
func
TestDeserialWithdraw
(
t
*
testing
.
T
)
{
pubInput
:=
"7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
//pubInput := "7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
pubInput
:=
"7b22416d6f756e74223a22333030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a223231303831383737323734333735363138373335313735373439373731303436353038353236303132343834373730373738303137323532353237363930353534343638383234363032303333222c2254726565526f6f7448617368223a223132363130353833363132333930383937343333363935303639393236343830353334333331333038313834303132323934383835373131303534393530343033333937393530343630323936227d"
var
withdraw
types
.
WithdrawPublicInput
var
withdraw
types
.
WithdrawPublicInput
data
,
err
:=
hex
.
DecodeString
(
pubInput
)
data
,
err
:=
hex
.
DecodeString
(
pubInput
)
assert
.
Nil
(
t
,
err
)
assert
.
Nil
(
t
,
err
)
...
...
plugin/dapp/mix/mix.md
View file @
62e2139c
...
@@ -5,3 +5,6 @@
...
@@ -5,3 +5,6 @@
1.
转账,私对私,花费某个支票,转账给目标账户,多出部分找零给自己,目标账户和金额全隐藏
1.
转账,私对私,花费某个支票,转账给目标账户,多出部分找零给自己,目标账户和金额全隐藏
1.
提款,私对公,花费某些支票,统一转出给签名地址,转账金额公开(验证),签名地址和支票账户不一定对应,也就是任何知道支票密码的人都可以提款
1.
提款,私对公,花费某些支票,统一转出给签名地址,转账金额公开(验证),签名地址和支票账户不一定对应,也就是任何知道支票密码的人都可以提款
##授权
1.
授权账户可以是任意账户,不需要注册公共授权账户,存款方需要自己保证授权地址ok,否则接收方和返回方都不能花费
plugin/dapp/mix/rpc/rpc.go
View file @
62e2139c
...
@@ -23,7 +23,6 @@ import (
...
@@ -23,7 +23,6 @@ import (
//}
//}
func
(
g
*
channelClient
)
GetRescanStatus
(
ctx
context
.
Context
,
in
*
types
.
ReqNil
)
(
*
types
.
ReqString
,
error
)
{
func
(
g
*
channelClient
)
GetRescanStatus
(
ctx
context
.
Context
,
in
*
types
.
ReqNil
)
(
*
types
.
ReqString
,
error
)
{
log
.
Info
(
"GetRescanStatus in"
)
data
,
err
:=
g
.
ExecWalletFunc
(
mixTy
.
MixX
,
"GetRescanStatus"
,
in
)
data
,
err
:=
g
.
ExecWalletFunc
(
mixTy
.
MixX
,
"GetRescanStatus"
,
in
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -34,7 +33,6 @@ func (g *channelClient) GetRescanStatus(ctx context.Context, in *types.ReqNil) (
...
@@ -34,7 +33,6 @@ func (g *channelClient) GetRescanStatus(ctx context.Context, in *types.ReqNil) (
//
//
//// 扫描UTXO以及获取扫描UTXO后的状态
//// 扫描UTXO以及获取扫描UTXO后的状态
func
(
g
*
channelClient
)
RescanNotes
(
ctx
context
.
Context
,
in
*
types
.
ReqNil
)
(
*
types
.
ReqString
,
error
)
{
func
(
g
*
channelClient
)
RescanNotes
(
ctx
context
.
Context
,
in
*
types
.
ReqNil
)
(
*
types
.
ReqString
,
error
)
{
log
.
Info
(
"RescanNotes in"
)
data
,
err
:=
g
.
ExecWalletFunc
(
mixTy
.
MixX
,
"RescanNotes"
,
in
)
data
,
err
:=
g
.
ExecWalletFunc
(
mixTy
.
MixX
,
"RescanNotes"
,
in
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -52,8 +50,7 @@ func (g *channelClient) EnablePrivacy(ctx context.Context, in *types.ReqAddrs) (
...
@@ -52,8 +50,7 @@ func (g *channelClient) EnablePrivacy(ctx context.Context, in *types.ReqAddrs) (
}
}
// ShowPrivacyAccountInfo display privacy account information for json rpc
// ShowPrivacyAccountInfo display privacy account information for json rpc
func
(
c
*
Jrpc
)
ShowAccountPrivacyInfo
(
in
*
types
.
ReqString
,
result
*
json
.
RawMessage
)
error
{
func
(
c
*
Jrpc
)
ShowAccountPrivacyInfo
(
in
*
mixTy
.
PaymentKeysReq
,
result
*
json
.
RawMessage
)
error
{
log
.
Info
(
"ShowAccountPrivacyInfo jrpc in"
)
reply
,
err
:=
c
.
cli
.
ExecWalletFunc
(
mixTy
.
MixX
,
"ShowAccountPrivacyInfo"
,
in
)
reply
,
err
:=
c
.
cli
.
ExecWalletFunc
(
mixTy
.
MixX
,
"ShowAccountPrivacyInfo"
,
in
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
...
plugin/dapp/mix/wallet/mix.go
View file @
62e2139c
...
@@ -35,13 +35,15 @@ func newPrivacyKey(rootPrivKey []byte) *mixTy.AccountPrivacyKey {
...
@@ -35,13 +35,15 @@ func newPrivacyKey(rootPrivKey []byte) *mixTy.AccountPrivacyKey {
payPrivKey
:=
key
.
([
32
]
byte
)
payPrivKey
:=
key
.
([
32
]
byte
)
//payPrivKey := mimcHashByte([][]byte{rootPrivKey})
//payPrivKey := mimcHashByte([][]byte{rootPrivKey})
//payPrivKey 可能超出fr的模,spendKey是payPrivKey对fr取的模,有可能和payPrivKey不相等,这里用spendKey取hash
//mimcHashByte 会对输入参数对fr取模,在电路上不会影响ReceiveKey
paymentKey
:=
&
mixTy
.
PaymentKeyPair
{}
paymentKey
:=
&
mixTy
.
PaymentKeyPair
{}
paymentKey
.
SpendKey
=
mixTy
.
Byte2Str
(
payPrivKey
[
:
])
paymentKey
.
SpendKey
=
mixTy
.
Byte2Str
(
payPrivKey
[
:
])
paymentKey
.
ReceiveKey
=
mixTy
.
Byte2Str
(
mimcHashByte
([][]
byte
{
payPrivKey
[
:
]
}))
paymentKey
.
ReceiveKey
=
mixTy
.
Byte2Str
(
mimcHashByte
([][]
byte
{
mixTy
.
Str2Byte
(
paymentKey
.
SpendKey
)
}))
encryptKeyPair
:=
&
mixTy
.
EncryptKeyPair
{}
encryptKeyPair
:=
&
mixTy
.
EncryptKeyPair
{}
pubkey
:=
ecdh
.
PublicKey
(
payPrivKey
)
pubkey
:=
ecdh
.
PublicKey
(
payPrivKey
)
//需要Hex编码,不要使用fr.string, 模范围不同
//
加解密是在x25519域,
需要Hex编码,不要使用fr.string, 模范围不同
encryptKeyPair
.
PrivKey
=
hex
.
EncodeToString
(
payPrivKey
[
:
])
encryptKeyPair
.
PrivKey
=
hex
.
EncodeToString
(
payPrivKey
[
:
])
pubData
:=
pubkey
.
([
32
]
byte
)
pubData
:=
pubkey
.
([
32
]
byte
)
encryptKeyPair
.
PubKey
=
hex
.
EncodeToString
(
pubData
[
:
])
encryptKeyPair
.
PubKey
=
hex
.
EncodeToString
(
pubData
[
:
])
...
@@ -396,7 +398,10 @@ func (p *mixPolicy) enablePrivacy(addrs []string) (*mixTy.ReqEnablePrivacyRst, e
...
@@ -396,7 +398,10 @@ func (p *mixPolicy) enablePrivacy(addrs []string) (*mixTy.ReqEnablePrivacyRst, e
func
(
p
*
mixPolicy
)
showAccountNoteInfo
(
req
*
mixTy
.
WalletMixIndexReq
)
(
*
mixTy
.
WalletNoteResp
,
error
)
{
func
(
p
*
mixPolicy
)
showAccountNoteInfo
(
req
*
mixTy
.
WalletMixIndexReq
)
(
*
mixTy
.
WalletNoteResp
,
error
)
{
resp
,
err
:=
p
.
listMixInfos
(
req
)
resp
,
err
:=
p
.
listMixInfos
(
req
)
return
resp
.
(
*
mixTy
.
WalletNoteResp
),
err
if
err
!=
nil
{
return
nil
,
err
}
return
resp
.
(
*
mixTy
.
WalletNoteResp
),
nil
}
}
func
(
p
*
mixPolicy
)
createRawTx
(
req
*
mixTy
.
CreateRawTxReq
)
(
*
types
.
Transaction
,
error
)
{
func
(
p
*
mixPolicy
)
createRawTx
(
req
*
mixTy
.
CreateRawTxReq
)
(
*
types
.
Transaction
,
error
)
{
...
...
plugin/dapp/mix/wallet/mixbizdb.go
View file @
62e2139c
...
@@ -364,18 +364,17 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
...
@@ -364,18 +364,17 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
//decrypted, save database
//decrypted, save database
var
info
mixTy
.
WalletNoteInfo
var
info
mixTy
.
WalletNoteInfo
info
.
NoteHash
=
noteHash
info
.
NoteHash
=
noteHash
info
.
Nullifier
=
hex
.
EncodeToString
(
mimcHashString
([]
string
{
rawData
.
NoteRandom
}))
info
.
Nullifier
=
mixTy
.
Byte2Str
(
mimcHashString
([]
string
{
rawData
.
NoteRandom
}))
//如果自己是spender,则记录有关spenderAuthHash,如果是returner,则记录returnerAuthHash
//如果自己是spender,则记录有关spenderAuthHash,如果是returner,则记录returnerAuthHash
//如果授权为spenderAuthHash,则根据授权hash索引到本地数据库,spender更新本地为VALID,returner侧不变仍为FROZEN,花费后,两端都变为USED
//如果授权为spenderAuthHash,则根据授权hash索引到本地数据库,spender更新本地为VALID,returner侧不变仍为FROZEN,花费后,两端都变为USED
//如果授权为returnerAuthHash,则returner更新本地为VALID,spender侧仍为FROZEN,
//如果授权为returnerAuthHash,则returner更新本地为VALID,spender侧仍为FROZEN,
info
.
AuthorizeSpendHash
=
"0"
info
.
AuthorizeSpendHash
=
"0"
if
len
(
rawData
.
AuthorizeKey
)
>
LENNULLKEY
{
if
len
(
rawData
.
AuthorizeKey
)
>
LENNULLKEY
{
switch
key
.
Privacy
.
PaymentKey
.
ReceiveKey
{
switch
key
.
Privacy
.
PaymentKey
.
ReceiveKey
{
case
rawData
.
ReceiverKey
:
case
rawData
.
ReceiverKey
,
rawData
.
ReturnKey
:
case
rawData
.
ReturnKey
:
info
.
AuthorizeSpendHash
=
mixTy
.
Byte2Str
(
mimcHashString
([]
string
{
key
.
Privacy
.
PaymentKey
.
ReceiveKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
info
.
AuthorizeSpendHash
=
hex
.
EncodeToString
(
mimcHashString
([]
string
{
key
.
Privacy
.
PaymentKey
.
ReceiveKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
case
rawData
.
AuthorizeKey
:
case
rawData
.
AuthorizeKey
:
info
.
AuthorizeHash
=
hex
.
EncodeToString
(
mimcHashString
([]
string
{
rawData
.
AuthorizeKey
,
rawData
.
NoteRandom
}))
info
.
AuthorizeHash
=
mixTy
.
Byte2Str
(
mimcHashString
([]
string
{
rawData
.
AuthorizeKey
,
rawData
.
NoteRandom
}))
}
}
}
}
...
...
plugin/dapp/mix/wallet/mixbizdb_test.go
View file @
62e2139c
...
@@ -2,6 +2,7 @@ package wallet
...
@@ -2,6 +2,7 @@ package wallet
import
(
import
(
"encoding/hex"
"encoding/hex"
"math/big"
"testing"
"testing"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common"
...
@@ -106,3 +107,28 @@ func TestEncodeSecretData(t *testing.T) {
...
@@ -106,3 +107,28 @@ func TestEncodeSecretData(t *testing.T) {
types
.
Decode
(
rawData
,
&
rawSecret
)
types
.
Decode
(
rawData
,
&
rawSecret
)
assert
.
Equal
(
t
,
rawSecret
.
ReceiverKey
,
secret
.
ReceiverKey
)
assert
.
Equal
(
t
,
rawSecret
.
ReceiverKey
,
secret
.
ReceiverKey
)
}
}
func
TestMimcHashPriKey
(
t
*
testing
.
T
)
{
//frModValue := "21888242871839275222246405745257275088548364400416034343698204186575808495617"
a
:=
"11888242871839275222246405745257275088548364400416034343698204186575808495617"
b
:=
"31888242871839275222246405745257275088548364400416034343698204186575808495617"
var
bigVal
,
lessVal
big
.
Int
lessVal
.
SetString
(
a
,
10
)
bigVal
.
SetString
(
b
,
10
)
//测试大值
prikey
:=
bigVal
.
Bytes
()
//prikey对modValue取了模,spendkey 不一定和Prikey相等了, lessval相等,bigVal不相等
spendKey
:=
mixTy
.
Byte2Str
(
prikey
[
:
])
t
.
Log
(
"prikey ori"
,
hex
.
EncodeToString
(
prikey
),
"prikey spendkey"
,
hex
.
EncodeToString
(
mixTy
.
Str2Byte
(
spendKey
)))
//mimcHash 会对每个val取模,这样又相等了
rcvSpenPri
:=
mimcHashByte
([][]
byte
{
mixTy
.
Str2Byte
(
spendKey
)})
//payPrivKey 可能超出fr的模,spendKey是payPrivKey对fr取的模,有可能和payPrivKey不相等,这里需要用spendKey取hash
rcvKeyPri
:=
mimcHashByte
([][]
byte
{
prikey
})
receiveKeyBig
:=
mimcHashByte
([][]
byte
{
mixTy
.
Str2Byte
(
b
)})
t
.
Log
(
"spendPri"
,
hex
.
EncodeToString
(
rcvSpenPri
),
"prikey"
,
hex
.
EncodeToString
(
rcvKeyPri
),
"big"
,
hex
.
EncodeToString
(
receiveKeyBig
))
assert
.
Equal
(
t
,
rcvSpenPri
,
rcvKeyPri
)
}
plugin/dapp/mix/wallet/txauth.go
View file @
62e2139c
...
@@ -18,13 +18,13 @@ import (
...
@@ -18,13 +18,13 @@ import (
type
AuthorizeInput
struct
{
type
AuthorizeInput
struct
{
//public
//public
TreeRootHash
string
`tag:"public"`
TreeRootHash
string
`tag:"public"`
AuthorizePubKey
string
`tag:"public"`
AuthorizeHash
string
`tag:"public"`
AuthorizeHash
string
`tag:"public"`
AuthorizeSpendHash
string
`tag:"public"`
AuthorizeSpendHash
string
`tag:"public"`
//secret
//secret
ReceiverPubKey
string
`tag:"secret"`
ReceiverPubKey
string
`tag:"secret"`
ReturnPubKey
string
`tag:"secret"`
ReturnPubKey
string
`tag:"secret"`
AuthorizePubKey
string
`tag:"secret"`
AuthorizePriKey
string
`tag:"secret"`
AuthorizePriKey
string
`tag:"secret"`
NoteRandom
string
`tag:"secret"`
NoteRandom
string
`tag:"secret"`
...
@@ -106,7 +106,7 @@ func (p *mixPolicy) getAuthParms(req *mixTy.AuthTxReq) (*AuthorizeInput, error)
...
@@ -106,7 +106,7 @@ func (p *mixPolicy) getAuthParms(req *mixTy.AuthTxReq) (*AuthorizeInput, error)
//default auto to receiver
//default auto to receiver
input
.
SpendFlag
=
"1"
input
.
SpendFlag
=
"1"
if
input
.
ReturnPubKey
!=
"0"
&&
input
.
ReturnPubKey
!
=
req
.
AuthorizeToAddr
{
if
input
.
ReturnPubKey
!=
"0"
&&
input
.
ReturnPubKey
=
=
req
.
AuthorizeToAddr
{
//auth to returner
//auth to returner
input
.
SpendFlag
=
"0"
input
.
SpendFlag
=
"0"
}
}
...
...
plugin/dapp/mix/wallet/txdeposit.go
View file @
62e2139c
...
@@ -33,7 +33,7 @@ type DepositInput struct {
...
@@ -33,7 +33,7 @@ type DepositInput struct {
}
}
func
(
p
*
mixPolicy
)
depositParams
(
receiver
,
returner
,
auth
,
amount
string
)
(
*
mixTy
.
DepositProofResp
,
error
)
{
func
(
p
*
mixPolicy
)
depositParams
(
receiver
,
returner
,
auth
,
amount
string
)
(
*
mixTy
.
DepositProofResp
,
error
)
{
if
receiver
==
returner
||
receiver
==
auth
||
returner
==
auth
{
if
len
(
receiver
)
>
0
&&
len
(
returner
)
>
0
&&
(
receiver
==
returner
||
receiver
==
auth
||
returner
==
auth
)
{
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"addrs should not be same to receiver=%s,return=%s,auth=%s"
,
return
nil
,
errors
.
Wrapf
(
types
.
ErrInvalidParam
,
"addrs should not be same to receiver=%s,return=%s,auth=%s"
,
receiver
,
returner
,
auth
)
receiver
,
returner
,
auth
)
}
}
...
...
plugin/dapp/mix/wallet/txtransfer.go
View file @
62e2139c
...
@@ -403,8 +403,8 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
...
@@ -403,8 +403,8 @@ func (p *mixPolicy) createTransferTx(req *mixTy.CreateRawTxReq) (*types.Transact
func
(
p
*
mixPolicy
)
getTransferTx
(
execName
string
,
inputProofs
[]
*
mixTy
.
ZkProofInfo
,
proofs
...*
mixTy
.
ZkProofInfo
)
(
*
types
.
Transaction
,
error
)
{
func
(
p
*
mixPolicy
)
getTransferTx
(
execName
string
,
inputProofs
[]
*
mixTy
.
ZkProofInfo
,
proofs
...*
mixTy
.
ZkProofInfo
)
(
*
types
.
Transaction
,
error
)
{
payload
:=
&
mixTy
.
MixTransferAction
{}
payload
:=
&
mixTy
.
MixTransferAction
{}
payload
.
Inputs
=
inputProofs
payload
.
Inputs
=
inputProofs
payload
.
Output
=
proofs
[
1
]
payload
.
Output
=
proofs
[
0
]
payload
.
Change
=
proofs
[
2
]
payload
.
Change
=
proofs
[
1
]
cfg
:=
p
.
getWalletOperate
()
.
GetAPI
()
.
GetConfig
()
cfg
:=
p
.
getWalletOperate
()
.
GetAPI
()
.
GetConfig
()
action
:=
&
mixTy
.
MixAction
{
action
:=
&
mixTy
.
MixAction
{
...
...
plugin/dapp/mix/wallet/util.go
View file @
62e2139c
...
@@ -284,6 +284,18 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) {
...
@@ -284,6 +284,18 @@ func updateTreePath(obj interface{}, treeProof *mixTy.TreePathProof) {
}
}
}
}
//func printObj(obj interface{}) {
// tv := reflect.ValueOf(obj)
// for i:=0;i<tv.NumField();i++{
// name := tv.Field(i).Elem()
// }
// for i, t := range treeProof.TreePath {
// tv.Elem().FieldByName("Path" + strconv.Itoa(i)).SetString(t)
// tv.Elem().FieldByName("Helper" + strconv.Itoa(i)).SetString(strconv.Itoa(int(treeProof.Helpers[i])))
// tv.Elem().FieldByName("Valid" + strconv.Itoa(i)).SetString("1")
// }
//}
func
getZkProofKeys
(
circuitFile
,
pkFile
string
,
inputs
interface
{})
(
*
mixTy
.
ZkProofInfo
,
error
)
{
func
getZkProofKeys
(
circuitFile
,
pkFile
string
,
inputs
interface
{})
(
*
mixTy
.
ZkProofInfo
,
error
)
{
assignments
,
err
:=
getAssignments
(
inputs
)
assignments
,
err
:=
getAssignments
(
inputs
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/dapp/paracross/cmd/build/testcase.sh
View file @
62e2139c
...
@@ -95,9 +95,13 @@ function para_set_toml() {
...
@@ -95,9 +95,13 @@ function para_set_toml() {
function
para_set_wallet
()
{
function
para_set_wallet
()
{
echo
"=========== # para set wallet ============="
echo
"=========== # para set wallet ============="
#1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
para_import_wallet
"
${
PARA_CLI
}
"
"0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b"
"paraAuthAccount"
para_import_wallet
"
${
PARA_CLI
}
"
"0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b"
"paraAuthAccount"
#1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
para_import_wallet
"
${
PARA_CLI2
}
"
"0x19c069234f9d3e61135fefbeb7791b149cdf6af536f26bebb310d4cd22c3fee4"
"paraAuthAccount"
para_import_wallet
"
${
PARA_CLI2
}
"
"0x19c069234f9d3e61135fefbeb7791b149cdf6af536f26bebb310d4cd22c3fee4"
"paraAuthAccount"
#1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
para_import_wallet
"
${
PARA_CLI1
}
"
"0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115"
"paraAuthAccount"
para_import_wallet
"
${
PARA_CLI1
}
"
"0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115"
"paraAuthAccount"
#1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
para_import_wallet
"
${
PARA_CLI4
}
"
"0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71"
"paraAuthAccount"
para_import_wallet
"
${
PARA_CLI4
}
"
"0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71"
"paraAuthAccount"
#14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
#14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment