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
Show 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() {
mv
docker-compose-metrics.yml docker-compose-paracross.yml
app
=
"paracross"
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
$?
if
[
"
$app
"
==
"paracross"
]
;
then
cp
-r
dapptest/
"
${
app
}
"
-ci
/
&&
echo
$?
fi
cd
"
${
app
}
"
-ci
/
&&
pwd
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() {
/*
public:
treeRootHash
authorizePubKey
authorizeHash(=hash(authpubkey+noterandom))
authorizeSpendHash(=hash(spendpub+value+noterandom))
...
...
@@ -25,6 +24,7 @@ private:
amount
receiverPubKey
returnPubKey
authorizePubKey
authorizePriKey
spendFlag
noteRandom
...
...
@@ -47,7 +47,7 @@ func NewAuth() *frontend.R1CS {
authorizePriKey
:=
circuit
.
SECRET_INPUT
(
"AuthorizePriKey"
)
noteRandom
:=
circuit
.
SECRET_INPUT
(
"NoteRandom"
)
authPubKey
:=
circuit
.
PUBLIC
_INPUT
(
"AuthorizePubKey"
)
authPubKey
:=
circuit
.
SECRET
_INPUT
(
"AuthorizePubKey"
)
authorizeHash
:=
circuit
.
PUBLIC_INPUT
(
"AuthorizeHash"
)
// hash function
...
...
plugin/dapp/mix/cmd/gnark/circuit/authorize/input
View file @
62e2139c
public, TreeRootHash,10531321614990797034921282585661869614556487056951485265320464926630499341310
public, AuthorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
public, AuthorizeHash,1267825436937766239630340333349685320927256968591056373125946583184548355070
public, AuthorizeSpendHash,14468512365438613046028281588661351435476168610934165547900473609197783547663
...
...
@@ -7,6 +6,7 @@ public, AuthorizeSpendHash,14468512365438613046028281588661351435476168610934165
secret, Amount,28242048
secret, ReceiverPubKey,13735985067536865723202617343666111332145536963656464451727087263423649028705
secret, ReturnPubKey,16067249407809359746114321133992130903102335882983385972747813693681808870497
public, AuthorizePubKey,13519883267141251871527102103999205179714486518503885909948192364772977661583
secret, AuthorizePriKey,17822967620457187568904804290291537271142779717280482398091401115827760898835
secret, SpendFlag,1
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
(
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
(
"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
(
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
(
"testing"
...
...
plugin/dapp/mix/cmd/gnark/circuit/withdraw/withdraw.go
View file @
62e2139c
...
...
@@ -72,6 +72,11 @@ func NewWithdraw() *frontend.R1CS {
targetAuthHash
:=
circuit
.
SELECT
(
authFlag
,
calcAuthHash
,
nullValue
)
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也是存在的,则可以不经过授权即可消费
//preImage=hash(spendPubkey, returnPubkey,AuthPubkey,spendValue,noteRandom)
noteHash
:=
circuit
.
SECRET_INPUT
(
"NoteHash"
)
...
...
plugin/dapp/mix/commands/mix.go
View file @
62e2139c
...
...
@@ -160,23 +160,27 @@ func mixConfigPaymentPubKeyParaCmd() *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
.
MarkFlagRequired
(
"receiver"
)
cmd
.
Flags
()
.
StringP
(
"encryptKey"
,
"
a
"
,
""
,
"encrypt key for secret"
)
cmd
.
Flags
()
.
StringP
(
"encryptKey"
,
"
e
"
,
""
,
"encrypt key for secret"
)
cmd
.
MarkFlagRequired
(
"encryptKey"
)
}
func
createConfigPayPubKey
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
addr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"addr"
)
receiver
,
_
:=
cmd
.
Flags
()
.
GetString
(
"receiver"
)
encryptKey
,
_
:=
cmd
.
Flags
()
.
GetString
(
"encryptKey"
)
payload
:=
&
mixTy
.
MixConfigAction
{}
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
{
Execer
:
getRealExecName
(
paraName
,
mixTy
.
MixX
),
...
...
@@ -362,8 +366,8 @@ func showMixTxs(cmd *cobra.Command, args []string) {
// ShowProposalBoardCmd 显示提案查询信息
func
ShowPaymentPubKeyCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"
rcvkey
"
,
Short
:
"
show
peer addr receive key info"
,
Use
:
"
peer
"
,
Short
:
"
get
peer addr receive key info"
,
Run
:
showPayment
,
}
addShowPaymentflags
(
cmd
)
...
...
@@ -411,7 +415,7 @@ func WalletCmd() *cobra.Command {
func
ShowAccountPrivacyInfo
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"keys"
,
Short
:
"
show account note privacy keys
"
,
Short
:
"
get account privacy keys for mix note
"
,
Run
:
accountPrivacy
,
}
accountPrivacyCmdFlags
(
cmd
)
...
...
@@ -421,9 +425,9 @@ func ShowAccountPrivacyInfo() *cobra.Command {
func
accountPrivacyCmdFlags
(
cmd
*
cobra
.
Command
)
{
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 {
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
func
DecodeSecretDataCmd
()
*
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 {
return
errors
.
Wrapf
(
mixTy
.
ErrAuthorizeHashExist
,
"auth=%s"
,
input
.
AuthorizeHash
)
}
if
!
isNotFound
(
err
)
{
return
errors
.
Wrapf
(
err
,
"auth=%s"
,
input
.
AuthorizeHash
)
return
errors
.
Wrapf
(
err
,
"
get
auth=%s"
,
input
.
AuthorizeHash
)
}
authPubKeys
,
err
:=
a
.
getAuthKeys
()
if
err
!=
nil
{
return
errors
.
Wrap
(
err
,
"get AuthPubkey"
)
}
//authorize pubkey hash should be configured already
var
found
bool
for
_
,
k
:=
range
authPubKeys
.
Keys
{
if
input
.
AuthorizePubKey
==
k
{
found
=
true
break
}
}
if
!
found
{
return
errors
.
Wrapf
(
types
.
ErrNotFound
,
"authPubkey=%s"
,
input
.
AuthorizePubKey
)
}
//
authPubKeys, err := a.getAuthKeys()
//
if err != nil {
//
return errors.Wrap(err, "get AuthPubkey")
//
}
//
//
//
authorize pubkey hash should be configured already
//
var found bool
//
for _, k := range authPubKeys.Keys {
//
if input.AuthorizePubKey == k {
//
found = true
//
break
//
}
//
}
//
if !found {
//
return errors.Wrapf(types.ErrNotFound, "authPubkey=%s", input.AuthorizePubKey)
//
}
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) {
}
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
)
}
//检查用户使用对应的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
{
Addr
:
a
.
fromaddr
,
...
...
plugin/dapp/mix/executor/zksnark/verify_test.go
View file @
62e2139c
...
...
@@ -68,10 +68,11 @@ func TestTransferOutput(t *testing.T) {
}
func
TestWithdraw
(
t
*
testing
.
T
)
{
verifyKey
:=
"1f8b08000000000000ff6c517b5493f719febd5f3e4384e8c029d63924729108164de6f0443c6d0232848028172fd888821f102e090b8156aa968bc0542c94702d0c90c65261749d384be4eea04e61a74e14052ad2cb10014f2bede04566bf9d2f4877ce4eff7aceef7d9ff7799ef7f7f2f884e7cd66f00084fb189d3afab85a13a3648e039b498006f001f63401ca570a6c1e8712600b0808f7a44426a8a3fc344929fa64604b0821ebd92c1e008f9148172680f2de026c0e01ca5bc2212162369b0740311ee6320f28af2dc0fe8100e5257989520e0911b1b966a274a10c94620bb06709500a098784ac66cf0080854f0293c868f4e61e1f048430ec391e8067b25e9712a517bd2df23d9a9878743713238ad4487febe1ee2b554447ab358ca7682793a0ff9986e8e4c29620589c04f65d0282453af722c4893dcf03102c0e992914c001735a38b8b08394cde701d8fd1445293aa47a6926f99f5901010050025b4408b1670d1480f5fff3b826b0859cef7b66df9fea858bbe67177cb9afb1658b2900c12155b25ea7d6c470b70121213fd2a7d94cce8bc6c8d7b32c7cfddb0630bdf4c8eb1f24debe80366a8b294ddac6c2b939075d5c7a8133d0f8a16b4067fbb3f41a745a45bb6c73ed3c81e2c293b73ebf77a719372bd33d7b7deb1f124eec9957b83c3037ac166b13c3c8ef9c4a44c86f280afed2309d81769131775a06bade011a1fdfae3999d0ded28b7dd667be91b94b0331e963814b4c84ba1cf9afc50d9ffda778deac36d1eab1dbf051eb2cde1aca7d74adc17e254e573ce936040f1b91ee4bf8a0eda9c206685c527c1355c5c314e6ecb4391e759d76425e7559a431ca0270d96b6c4d73aad35242ccabf635a92fccc7fd26192bbabc4667822e876044d8f4805e5e9685cb96e8a2474def66008daabc89ac6b7b3a2dd0ceed15ef955b2dc370feeba5a6f7af0b53913f251be3cf8f2799d31d3b1a6f0a6ffc4f297e9d13e7f186b473126797f6ae1d6ef9533f0ac24555771f8c25018daf383a7e697da17c08e31fdf13bf78e831830fb2981b21bce28b68f92470d6a55ffe9959ed2f86b74c51233f84e2476959ade22b7b2f627acfd5ef6b4b3f56a3ebb3d46aafdaa27ea0f1fc4ad19f7995cf235056c19806cedd1762aef2b62974dd88161dd6787d72bfa0ed08312f0b3466b7e49e7fbbed9bcff1d54faa43e6f7b51ec3809b37322d9f248b91faacb9efdbbe158fb85bf8ef5ff1d5f3b6fde89bb95fb7aaf9c01a1cd309bf9775fcfa5bb40c5cbe8bfceb618f39df09376163d0a91d5378ea46ecded3b7365fc2adc7cb04bffa7b5634badecbf66efcf7a560a0d1b6c2d031dd196e89f15230fc18a218c6f63341dddbd78729d021dd739d631ef5d5cb5b34add934f95d4b483f1e0aed087ae77ed4619c7f2b3fff4150e02a5ceef785ec1fe3572b80c6aac31dedfe83e3264cf3d1777be5bf21c722f73f7adb16ba3168a7b69f49ec66abcce98e2cdb3837fc62ed288ea6964f3c97877e887e55137b07f784be40fb0d43b2846a9b1d40a3c7e5229135ad6ac581dcb4f1bbb1d627707ae4cefaae99c29be8fe0bab922bd9fd6ee6dfa381c6badad56b3768b7ba61d053c7a694c8996d683c10ee601f6b3c80e2987d39562623c72a55acc92e6a911971245f4f456cefd98bc5073dd7ad6eaba6d0f5a947535ac8e42e02342a9516fe81fd3088f5db263b96d6542a71c5c98d4bcafad3aad15def30e674a5c61168ecf9f460bcb3c47e39ee2a3e82a2ede706d136a0722adeea97025c3e6c6bd52c35aa38b14811dfc2bbaf7e0ae5aa37eb2a9bb57e987338d5d76aea6e1eae4dea72d06cf06f051a0f7d7769deee71463db2f6cedad93ac9efb13c603d4f5e9a7b0d5d7a4bfd3a72fe3ac789cd4ae3a66d3639edc0475f18fd1b368d9e4043cac5f7a33fad50a24bdd7b4362e7d662a0f1e04ebbcd6f76c9f5981ab0ea6f32d5d51e2c6978f58798c6c053e8ec3e77b9c632e23a2140f31589da148d5e18aa639860ad56bfeb6872ac2068b74fc47ebf609f158a147dac56a74e63429218cd31ae47fe1b0000ffff4d389d0e6d060000"
pubInput
:=
"7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
proof
:=
"1f8b08000000000000ff62666360d6f9dfc8ccc8c81a50949f9fc6f8bf8981919991c9b188f17f0b0323b377513198c1e454ccf8bf83818141e57f3333232387bba1635a5a665e2a4492913182f17f1b0323632488626010ffdfcac8c8c8ee9a939a9b9a5702966263e400696e076b368269ee8069ee8268ee62606050f8dfc9ccc8c8946a04166562647234009bc0e4680831fd1fa3edff264646961f3cb782cffcf57b38f387a99d7c6ee7868c1f3fe4e619b92af066c9fc902ddcff4e74b2f27246961fcd1246476cad8a97ff98d813ff2dedc235b31f6cd613169a1acf32fea1b19e9125be36692503c8b4bf8c2e3b7e7eb698f2e3ee5229cfd3422adb7fec3aef7064554acebb1fba379fbb2d5a9a12c3c8f2635e4991d9a70acd9c1f5b049592aaf8f79dfec1bb559f6182a9ede31ffafd571654fc791bc4c008328ea5ae9af1f906c9fd3f8edddef3dca12f51fcc7612769b3df59672a7fe84e7cc3fe3bf7773523cb8fcd82b9571744a9b9fe58207621f796e6cfb33f625656354c2c78fff9074fd8dfbdda1f2d37831dd7ab5ad5c95b715feb8787c0a367910fbf16fd9855785449cec1d5ff876affba77fc6b773130b2fc90d76177f92a65d7f863d1753ec512a1d2fc1f874c4ef9b21a98f5fd600e8fd5fdf2f3db5206060640000000ffffbe0a8c21f4010000"
verifyKey
:=
"1f8b08000000000000ff6c51795093671a7f9fe4230d1a15224705c508b845442520ba8a42498c8051ea8180656345fc20c190484850504428208756a11e8834d80d663d285854c6455d0705d68a2e5a0b54915a8ecaacb25e94f5316abf9d2f48776667fffacdfb1cbfe37db83cc29532d95c004114ad5325a4ab3489723a1d981c0214800c985c029c503f60f6b02806663f01c14ac346b52a3e5cb3c5a04f05e61021641af33917804b8bfd46368023f505269f00472a6691102f268f0bc0a1e759cb5ce0487c812920c09188dfa31f8b848898ddd641bf913270427c812922c00911b34888335308001fc8d47432add15b7b3ce0134233c55c80c054bdce10af176d1785c62527c745d089a28d1abf8079b343fd421212541a3a50b48456ebff4f4394399212f8a39bc07c41803f3acebe08f164f67201f8a34bd6110e408cd52dac1bc9e0c7ece3024cf9dd8a5c14ab782f26feafd87e02002007e60021642af32507c0ee7fe7d82630a5ac6e8955f7f77ae9a86ed1882efb354ecc410e003f5691aad7a93489ec6d4040c86fd44f4c0eab45e12187da976e973aabd1609719e9bd7e7e3d862b266ccefdb2d88cfc6de6575b87172c060ac34f788ea76ebcedc42237fb17e3e70e34a278d1bf1fdbbb19fa519074fc68439a5d1661d9d28f4df0ba1a552cc54f7f21394be53307f06ceef449bb1206f720e772e3b46a557713507876f79a28a540198ccf85fab4825f2c4d981677fd9213d40a10247f9d27b3bd61b4b2694f9676c6ce9afa161d25f2e3073687ea50d6973fe540a47e2c728dd75fb6bdae3c0714ba24a698e65d72e8c4ccaf5fa65efea7b01ee70cb62462c87205daad9924fb3ee0761c21d6ac70abac3f68da15231e98fb8af9a02ce52b6c444515efeefa4014c6dd7c9066bce00d143eb333276f2bfabc0a677a78fd1679adfa28ba1b5f4b2ddf9fea43f76f331774a9fc5badeedcae79d5dc0af639843faa4b9eb53ff97339da563de9d1b41e7b8393d3164dfe35d04309140e2b3cebb76524987068e87a073743f402a34abe49bc27a91122372b5aeb5f3cff9d956da7474f53cd3a37172c684f1faea14d6d98a48a5c1814ebf00edd9cb5a6e045d93380c287cbd5bb453b3e2c45bed3706d94a3d20605ce6dd2b1376c2ea27df4acd28e6bfb7389352c50e871bf3da95aba54820de3a06d7b952909a7381dc1757fea35a1f041c599b13d55dd40e1969b8e3197fed1558bd5852edc85e27d0c1e3978b5f2c7ae9f3538ee62d8daa91794df8ca4ed79d46cd8d94e630bf793def696d077d81db9a94c360414baca2abd7c6c6eca81c2ee7ee17c5e5653d2eb8d2dde0ecbb29bf13196c2b0c7e06514cc0ce63fb5ef5efafe14eee54b66c2ed53c518b48a1fb3baf3b010b38e7ee178e77a4a310a9f0c99ff55b8b50428347977f9da3fec50e2e0ca079399882b9e287e53985ef807d88b3e675f1dd605ae1bb29ab33c13edd207ac7d81d3eb6225b6b5eeade86df9587238758c33dafa9bfd1a88e318a05013b03eafa2313319d396f795df3b33e482cb368d3fd6d27bad1f79572ed43f4affa1cefa79364061c8dc5d374c4f7136fec55c10b63d6222852736c4d9449b3df27186d673d58c0fd36380c2f3f93d2b94ab3e6d47c71503b67b8dcdcdf89d7c41fc361551e19c57cfa77f3b58ee4180c28a8b6a1f4d59c30614a5c406145df13e81cb02b79e74ceddf8314e38b628eaa974ee65a0509193974bf6fdfd34bafb6484259794203eef73b50bf85b5617f2440e5bca3c17b4b0643ba3e7f7d59f32f2b06671ac4b6f6b228d3fc4db6cb8630a32be1e0abb5fd7f2f82e5018e3ab769a762e7c32f29ad6dece769e65c2ca239b732c735a0770a2daa971c9cae1cf582ef9f99f024e3f6d4841b3ff8a3da136a78370383bbfeeeeb984669c7ae6966bc67dea3950b87052de573513f30ee2d8f57f7cd46e5155e28e3bf11f7df7ab220067b7f576081a62642c595271d29c299d05fe7877cf47e1272dd96538e6ade55447c5bd12e49bfb5de5c7f75d050a076e693216ef1808c52eb7a28775c1272a5053effab25c7efe6be4bf7998f1b3cfde0984800d2f24596bd0e8f99f44c83e8b0e5f2d1344ea687ab556ab0f8b4b550a430c7aa556a7caa0d76ca1359bd8d2b808835aad4a50d13af645fe130000ffff37a667a7c7060000"
//pubInput := "7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
//proof := "1f8b08000000000000ff62666360d6f9dfc8ccc8c81a50949f9fc6f8bf8981919991c9b188f17f0b0323b377513198c1e454ccf8bf83818141e57f3333232387bba1635a5a665e2a4492913182f17f1b0323632488626010ffdfcac8c8c8ee9a939a9b9a5702966263e400696e076b368269ee8069ee8268ee62606050f8dfc9ccc8c8946a04166562647234009bc0e4680831fd1fa3edff264646961f3cb782cffcf57b38f387a99d7c6ee7868c1f3fe4e619b92af066c9fc902ddcff4e74b2f27246961fcd1246476cad8a97ff98d813ff2dedc235b31f6cd613169a1acf32fea1b19e9125be36692503c8b4bf8c2e3b7e7eb698f2e3ee5229cfd3422adb7fec3aef7064554acebb1fba379fbb2d5a9a12c3c8f2635e4991d9a70acd9c1f5b049592aaf8f79dfec1bb559f6182a9ede31ffafd571654fc791bc4c008328ea5ae9af1f906c9fd3f8edddef3dca12f51fcc7612769b3df59672a7fe84e7cc3fe3bf7773523cb8fcd82b9571744a9b9fe58207621f796e6cfb33f625656354c2c78fff9074fd8dfbdda1f2d37831dd7ab5ad5c95b715feb8787c0a367910fbf16fd9855785449cec1d5ff876affba77fc6b773130b2fc90d76177f92a65d7f863d1753ec512a1d2fc1f874c4ef9b21a98f5fd600e8fd5fdf2f3db5206060640000000ffffbe0a8c21f4010000"
pubInput
:=
"7b22416d6f756e74223a22333030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a223231303831383737323734333735363138373335313735373439373731303436353038353236303132343834373730373738303137323532353237363930353534343638383234363032303333222c2254726565526f6f7448617368223a223132363130353833363132333930383937343333363935303639393236343830353334333331333038313834303132323934383835373131303534393530343033333937393530343630323936227d"
proof
:=
"1f8b08000000000000ff62666360d6f9dfc8ccc8c81a50949f9fc6f8bf8981919991c9b188f17f0b0323b377513198c1e454ccf8bf83818141e57f3333232387bba1635a5a665e2a4492913182f17f1b0323632488626010ffdfcac8c8c8ee9a939a9b9a5702966263e400696e076b368269ee8069ee8268ee62606050f8dfc9ccc8c8946a04166562647234009bc0e4680831fd1fa3edff264646961fbe01ef7e7c9b2095fec3ff5cd9b4a650fe653f56de9e10c1b2f3fcfb1fba6ca55b1af4f32730b2fc68d3f996a278fc47e18f4be65589afde5cb5fb61b961eb7aeec08f823f84dc4ffc906a35b9c50032ed2bf792b3494c0ae23f026f4ced59f0cf25f787724b689ddae940c11fac5f3d5438a7942431b2fc70e96aad173d3c63ee8ffa1eefe2cd9515313f38b6f04cace4586bfe43dc4f4bd4416195010323c8b89223b3055afe159cfeb1bb45f9ee7ed30a931f2d27bbd5ae2cdab1f987d8d23dcd960eb70f33b2fc30775ea619b9e360d28f0b8a2783d7ab775cfa71e5e6ac673573ae7dfec168a2f3f4c592af2bc08e0bd06c399ca215b6f4c7a58776c21a73ee95ffd8d1e6f4de7e4dda9a1fcaca379ebdad6f156664f9b1ddc665b518a7df841fc7c538664c49f937fb87cbc7b66216b3acf33fb8fd6bb56e2857fa32303000020000fffffbc89ea0f4010000"
rst
,
err
:=
Verify
(
verifyKey
,
proof
,
pubInput
)
assert
.
Nil
(
t
,
err
)
assert
.
Equal
(
t
,
true
,
rst
)
...
...
@@ -174,7 +175,8 @@ func TestDeserialDeposit(t *testing.T) {
}
func
TestDeserialWithdraw
(
t
*
testing
.
T
)
{
pubInput
:=
"7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
//pubInput := "7b22416d6f756e74223a22353030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a2233393131373734303430353637393732383732393536303038333837313431313735303031343139363439363932393439323033313430303839303539303938393536373733333239313838222c2254726565526f6f7448617368223a2237343037333733363733363034323736313532383031333534303034383531333833343631353339333137393737333037393435313938363234383036353033393535333032353438373030227d"
pubInput
:=
"7b22416d6f756e74223a22333030303030303030222c22417574686f72697a655370656e6448617368223a2230222c224e756c6c696669657248617368223a223231303831383737323734333735363138373335313735373439373731303436353038353236303132343834373730373738303137323532353237363930353534343638383234363032303333222c2254726565526f6f7448617368223a223132363130353833363132333930383937343333363935303639393236343830353334333331333038313834303132323934383835373131303534393530343033333937393530343630323936227d"
var
withdraw
types
.
WithdrawPublicInput
data
,
err
:=
hex
.
DecodeString
(
pubInput
)
assert
.
Nil
(
t
,
err
)
...
...
plugin/dapp/mix/mix.md
View file @
62e2139c
...
...
@@ -5,3 +5,6 @@
1.
转账,私对私,花费某个支票,转账给目标账户,多出部分找零给自己,目标账户和金额全隐藏
1.
提款,私对公,花费某些支票,统一转出给签名地址,转账金额公开(验证),签名地址和支票账户不一定对应,也就是任何知道支票密码的人都可以提款
##授权
1.
授权账户可以是任意账户,不需要注册公共授权账户,存款方需要自己保证授权地址ok,否则接收方和返回方都不能花费
plugin/dapp/mix/rpc/rpc.go
View file @
62e2139c
...
...
@@ -23,7 +23,6 @@ import (
//}
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
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -34,7 +33,6 @@ func (g *channelClient) GetRescanStatus(ctx context.Context, in *types.ReqNil) (
//
//// 扫描UTXO以及获取扫描UTXO后的状态
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
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -52,8 +50,7 @@ func (g *channelClient) EnablePrivacy(ctx context.Context, in *types.ReqAddrs) (
}
// ShowPrivacyAccountInfo display privacy account information for json rpc
func
(
c
*
Jrpc
)
ShowAccountPrivacyInfo
(
in
*
types
.
ReqString
,
result
*
json
.
RawMessage
)
error
{
log
.
Info
(
"ShowAccountPrivacyInfo jrpc in"
)
func
(
c
*
Jrpc
)
ShowAccountPrivacyInfo
(
in
*
mixTy
.
PaymentKeysReq
,
result
*
json
.
RawMessage
)
error
{
reply
,
err
:=
c
.
cli
.
ExecWalletFunc
(
mixTy
.
MixX
,
"ShowAccountPrivacyInfo"
,
in
)
if
err
!=
nil
{
return
err
...
...
plugin/dapp/mix/wallet/mix.go
View file @
62e2139c
...
...
@@ -35,13 +35,15 @@ func newPrivacyKey(rootPrivKey []byte) *mixTy.AccountPrivacyKey {
payPrivKey
:=
key
.
([
32
]
byte
)
//payPrivKey := mimcHashByte([][]byte{rootPrivKey})
//payPrivKey 可能超出fr的模,spendKey是payPrivKey对fr取的模,有可能和payPrivKey不相等,这里用spendKey取hash
//mimcHashByte 会对输入参数对fr取模,在电路上不会影响ReceiveKey
paymentKey
:=
&
mixTy
.
PaymentKeyPair
{}
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
{}
pubkey
:=
ecdh
.
PublicKey
(
payPrivKey
)
//需要Hex编码,不要使用fr.string, 模范围不同
//
加解密是在x25519域,
需要Hex编码,不要使用fr.string, 模范围不同
encryptKeyPair
.
PrivKey
=
hex
.
EncodeToString
(
payPrivKey
[
:
])
pubData
:=
pubkey
.
([
32
]
byte
)
encryptKeyPair
.
PubKey
=
hex
.
EncodeToString
(
pubData
[
:
])
...
...
@@ -396,7 +398,10 @@ func (p *mixPolicy) enablePrivacy(addrs []string) (*mixTy.ReqEnablePrivacyRst, e
func
(
p
*
mixPolicy
)
showAccountNoteInfo
(
req
*
mixTy
.
WalletMixIndexReq
)
(
*
mixTy
.
WalletNoteResp
,
error
)
{
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
)
{
...
...
plugin/dapp/mix/wallet/mixbizdb.go
View file @
62e2139c
...
...
@@ -364,18 +364,17 @@ func (p *mixPolicy) decodeSecret(noteHash string, secretData string, privacyKeys
//decrypted, save database
var
info
mixTy
.
WalletNoteInfo
info
.
NoteHash
=
noteHash
info
.
Nullifier
=
hex
.
EncodeToString
(
mimcHashString
([]
string
{
rawData
.
NoteRandom
}))
info
.
Nullifier
=
mixTy
.
Byte2Str
(
mimcHashString
([]
string
{
rawData
.
NoteRandom
}))
//如果自己是spender,则记录有关spenderAuthHash,如果是returner,则记录returnerAuthHash
//如果授权为spenderAuthHash,则根据授权hash索引到本地数据库,spender更新本地为VALID,returner侧不变仍为FROZEN,花费后,两端都变为USED
//如果授权为returnerAuthHash,则returner更新本地为VALID,spender侧仍为FROZEN,
info
.
AuthorizeSpendHash
=
"0"
if
len
(
rawData
.
AuthorizeKey
)
>
LENNULLKEY
{
switch
key
.
Privacy
.
PaymentKey
.
ReceiveKey
{
case
rawData
.
ReceiverKey
:
case
rawData
.
ReturnKey
:
info
.
AuthorizeSpendHash
=
hex
.
EncodeToString
(
mimcHashString
([]
string
{
key
.
Privacy
.
PaymentKey
.
ReceiveKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
case
rawData
.
ReceiverKey
,
rawData
.
ReturnKey
:
info
.
AuthorizeSpendHash
=
mixTy
.
Byte2Str
(
mimcHashString
([]
string
{
key
.
Privacy
.
PaymentKey
.
ReceiveKey
,
rawData
.
Amount
,
rawData
.
NoteRandom
}))
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
import
(
"encoding/hex"
"math/big"
"testing"
"github.com/33cn/chain33/common"
...
...
@@ -106,3 +107,28 @@ func TestEncodeSecretData(t *testing.T) {
types
.
Decode
(
rawData
,
&
rawSecret
)
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 (
type
AuthorizeInput
struct
{
//public
TreeRootHash
string
`tag:"public"`
AuthorizePubKey
string
`tag:"public"`
AuthorizeHash
string
`tag:"public"`
AuthorizeSpendHash
string
`tag:"public"`
//secret
ReceiverPubKey
string
`tag:"secret"`
ReturnPubKey
string
`tag:"secret"`
AuthorizePubKey
string
`tag:"secret"`
AuthorizePriKey
string
`tag:"secret"`
NoteRandom
string
`tag:"secret"`
...
...
@@ -106,7 +106,7 @@ func (p *mixPolicy) getAuthParms(req *mixTy.AuthTxReq) (*AuthorizeInput, error)
//default auto to receiver
input
.
SpendFlag
=
"1"
if
input
.
ReturnPubKey
!=
"0"
&&
input
.
ReturnPubKey
!
=
req
.
AuthorizeToAddr
{
if
input
.
ReturnPubKey
!=
"0"
&&
input
.
ReturnPubKey
=
=
req
.
AuthorizeToAddr
{
//auth to returner
input
.
SpendFlag
=
"0"
}
...
...
plugin/dapp/mix/wallet/txdeposit.go
View file @
62e2139c
...
...
@@ -33,7 +33,7 @@ type DepositInput struct {
}
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"
,
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
func
(
p
*
mixPolicy
)
getTransferTx
(
execName
string
,
inputProofs
[]
*
mixTy
.
ZkProofInfo
,
proofs
...*
mixTy
.
ZkProofInfo
)
(
*
types
.
Transaction
,
error
)
{
payload
:=
&
mixTy
.
MixTransferAction
{}
payload
.
Inputs
=
inputProofs
payload
.
Output
=
proofs
[
1
]
payload
.
Change
=
proofs
[
2
]
payload
.
Output
=
proofs
[
0
]
payload
.
Change
=
proofs
[
1
]
cfg
:=
p
.
getWalletOperate
()
.
GetAPI
()
.
GetConfig
()
action
:=
&
mixTy
.
MixAction
{
...
...
plugin/dapp/mix/wallet/util.go
View file @
62e2139c
...
...
@@ -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
)
{
assignments
,
err
:=
getAssignments
(
inputs
)
if
err
!=
nil
{
...
...
plugin/dapp/paracross/cmd/build/testcase.sh
View file @
62e2139c
...
...
@@ -95,9 +95,13 @@ function para_set_toml() {
function
para_set_wallet
()
{
echo
"=========== # para set wallet ============="
#1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4
para_import_wallet
"
${
PARA_CLI
}
"
"0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b"
"paraAuthAccount"
#1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR
para_import_wallet
"
${
PARA_CLI2
}
"
"0x19c069234f9d3e61135fefbeb7791b149cdf6af536f26bebb310d4cd22c3fee4"
"paraAuthAccount"
#1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k
para_import_wallet
"
${
PARA_CLI1
}
"
"0x7a80a1f75d7360c6123c32a78ecf978c1ac55636f87892df38d8b85a9aeff115"
"paraAuthAccount"
#1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs
para_import_wallet
"
${
PARA_CLI4
}
"
"0xcacb1f5d51700aea07fca2246ab43b0917d70405c65edea9b5063d72eb5c6b71"
"paraAuthAccount"
#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