Unverified Commit ed28512b authored by vipwzw's avatar vipwzw Committed by GitHub

Merge pull request #786 from mdj33/issue776_relay_support_token

relay 支持多资产兑换
parents e0449943 0e86b911
...@@ -148,6 +148,9 @@ function para_transfer() { ...@@ -148,6 +148,9 @@ function para_transfer() {
main_transfer2account "1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj" main_transfer2account "1Ka7EPFRqs3v9yreXG6qA4RQbNmbPJCZPj"
main_transfer2account "1Luh4AziYyaC5zP3hUXtXFZS873xAxm6rH" 10 main_transfer2account "1Luh4AziYyaC5zP3hUXtXFZS873xAxm6rH" 10
main_transfer2account "1NNaYHkscJaLJ2wUrFNeh6cQXBS4TrFYeB" 10 main_transfer2account "1NNaYHkscJaLJ2wUrFNeh6cQXBS4TrFYeB" 10
#relay test
main_transfer2account "1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3" 10
main_transfer2account "1EZKahMRfoMiKp1BewjWrQWoaJ9kmC4hum" 10
#relay rpc test #relay rpc test
para_transfer2account "12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv" para_transfer2account "12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
para_transfer2account "1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY" para_transfer2account "1E5saiXVb9mW8wcWUUZjsHJPZs5GmdzuSY"
...@@ -290,42 +293,49 @@ function token_create() { ...@@ -290,42 +293,49 @@ function token_create() {
fi fi
} }
#1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 also be used in relay rpc_test
function token_transfer() { function token_transfer() {
echo "=========== # 2.token transfer =============" echo "=========== # 2.token transfer ============="
hash=$(${1} send token transfer -a 11 -s GD -t 1GGF8toZd96wCnfJngTwXZnWCBdWHYYvjw -k 0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b) hash=$(${1} send token transfer -a 100 -s GD -t 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 -k 0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b)
hash2=$(${1} send token transfer -a 100 -s GD -t 1EZKahMRfoMiKp1BewjWrQWoaJ9kmC4hum -k 0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b)
echo "${hash}" echo "${hash}"
echo "${hash2}"
query_tx "${1}" "${hash}" query_tx "${1}" "${hash}"
${1} token balance -a 1GGF8toZd96wCnfJngTwXZnWCBdWHYYvjw -e token -s GD ${1} token balance -a 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 -e token -s GD
balance=$(${1} token balance -a 1GGF8toZd96wCnfJngTwXZnWCBdWHYYvjw -e token -s GD | jq -r '.[]|.balance') balance=$(${1} token balance -a 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 -e token -s GD | jq -r '.[]|.balance')
if [ "${balance}" != "11.0000" ]; then balance2=$(${1} token balance -a 1EZKahMRfoMiKp1BewjWrQWoaJ9kmC4hum -e token -s GD | jq -r '.[]|.balance')
if [ "${balance}" != "100.0000" ] || [ "${balance2}" != "100.0000" ]; then
echo "wrong para token transfer, should be 11.0000" echo "wrong para token transfer, should be 11.0000"
exit 1 exit 1
fi fi
echo "=========== # 3.token send exec =============" echo "=========== # 3.token send exec ============="
hash=$(${1} send token send_exec -a 11 -s GD -e paracross -k 0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b) hash=$(${1} send token send_exec -a 100 -s GD -e relay -k 0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962)
hash2=$(${1} send token send_exec -a 100 -s GD -e relay -k ec9162ea5fc2f473ab8240619a0a0f495ba9e9e5d4d9c434b8794a68280236c4)
echo "${hash}" echo "${hash}"
echo "${hash2}"
query_tx "${1}" "${hash}" query_tx "${1}" "${hash}"
# $ ./build/chain33-cli exec addr -e user.p.para.paracross #user.p.para.relay addr
# 19WJJv96nKAU4sHFWqGmsqfjxd37jazqii # 1464s4B8HbPdUZNR74EBWSH8QLGYgpjr2q
${1} token balance -a 19WJJv96nKAU4sHFWqGmsqfjxd37jazqii -e token -s GD ${1} token balance -a 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 -e token -s GD
balance=$(${1} token balance -a 19WJJv96nKAU4sHFWqGmsqfjxd37jazqii -e token -s GD | jq -r '.[]|.balance') balance=$(${1} token balance -a 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 -e relay -s GD | jq -r '.[]|.balance')
if [ "${balance}" != "11.0000" ]; then balance2=$(${1} token balance -a 1EZKahMRfoMiKp1BewjWrQWoaJ9kmC4hum -e relay -s GD | jq -r '.[]|.balance')
echo "wrong para token send exec, should be 11.0000" if [ "${balance}" != "100.0000" ] || [ "${balance2}" != "100.0000" ]; then
echo "wrong para token send exec, should be 100.0000, balance=$balance,balance1=$balance2"
exit 1 exit 1
fi fi
echo "=========== # 4.token withdraw =============" echo "=========== # 4.token withdraw ============="
hash=$(${1} send token withdraw -a 11 -s GD -e paracross -k 0x6da92a632ab7deb67d38c0f6560bcfed28167998f6496db64c258d5e8393a81b) hash=$(${1} send token withdraw -a 20 -s GD -e relay -k 0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962)
echo "${hash}" echo "${hash}"
query_tx "${1}" "${hash}" query_tx "${1}" "${hash}"
${1} token balance -a 19WJJv96nKAU4sHFWqGmsqfjxd37jazqii -e token -s GD ${1} token balance -a 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 -e relay -s GD
balance=$(${1} token balance -a 19WJJv96nKAU4sHFWqGmsqfjxd37jazqii -e token -s GD | jq -r '.[]|.balance') balance=$(${1} token balance -a 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3 -e relay -s GD | jq -r '.[]|.balance')
if [ "${balance}" != "0.0000" ]; then if [ "${balance}" != "80.0000" ]; then
echo "wrong para token withdraw, should be 0.0000" echo "wrong para token withdraw, should be 80.0000"
exit 1 exit 1
fi fi
} }
......
...@@ -4,14 +4,14 @@ strpwd=$(pwd) ...@@ -4,14 +4,14 @@ strpwd=$(pwd)
strcmd=${strpwd##*dapp/} strcmd=${strpwd##*dapp/}
strapp=${strcmd%/cmd*} strapp=${strcmd%/cmd*}
#OUT_DIR="${1}/$strapp" OUT_DIR="${1}/$strapp"
#SRC_RELAYD=github.com/33cn/plugin/plugin/dapp/relay/cmd/relayd SRC_RELAYD=github.com/33cn/plugin/plugin/dapp/relay/cmd/relayd
#FLAG=$2 FLAG=$2
#
## shellcheck disable=SC2086,1072 # shellcheck disable=SC2086,1072
#go build -i ${FLAG} -v -o "${OUT_DIR}/relayd" "${SRC_RELAYD}" go build -i ${FLAG} -v -o "${OUT_DIR}/relayd" "${SRC_RELAYD}"
#cp ./relayd/relayd.toml "${OUT_DIR}/relayd.toml" cp ./relayd/relayd.toml "${OUT_DIR}/relayd.toml"
#cp ./build/* "${OUT_DIR}" cp ./build/* "${OUT_DIR}"
OUT_TESTDIR="${1}/dapptest/$strapp" OUT_TESTDIR="${1}/dapptest/$strapp"
mkdir -p "${OUT_TESTDIR}" mkdir -p "${OUT_TESTDIR}"
......
This diff is collapsed.
...@@ -10,8 +10,8 @@ syncSetup = 100 ...@@ -10,8 +10,8 @@ syncSetup = 100
syncSetupCount = 10 syncSetupCount = 10
[auth] [auth]
# test private key # test private key 1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3
privateKey = "4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01" privateKey = "22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962"
publicKey = "" publicKey = ""
address = "" address = ""
......
...@@ -344,7 +344,7 @@ func (r *Relayd) dealOrder() { ...@@ -344,7 +344,7 @@ func (r *Relayd) dealOrder() {
for _, value := range result.GetOrders() { for _, value := range result.GetOrders() {
// TODO save db ??? // TODO save db ???
tx, err := r.btcClient.GetTransaction(value.CoinTxHash) tx, err := r.btcClient.GetTransaction(value.XTxHash)
if err != nil { if err != nil {
log.Error("dealOrder", "dealOrder GetTransaction error: ", err) log.Error("dealOrder", "dealOrder GetTransaction error: ", err)
continue continue
......
...@@ -11,6 +11,9 @@ import ( ...@@ -11,6 +11,9 @@ import (
"github.com/33cn/chain33/common/address" "github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/common/crypto" "github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
typesmocks "github.com/33cn/chain33/types/mocks"
types2 "github.com/33cn/plugin/plugin/dapp/relay/types"
"github.com/stretchr/testify/mock"
) )
func TestGeneratePrivateKey(t *testing.T) { func TestGeneratePrivateKey(t *testing.T) {
...@@ -28,3 +31,27 @@ func TestGeneratePrivateKey(t *testing.T) { ...@@ -28,3 +31,27 @@ func TestGeneratePrivateKey(t *testing.T) {
t.Log("publick key: ", common.ToHex(key.PubKey().Bytes())) t.Log("publick key: ", common.ToHex(key.PubKey().Bytes()))
t.Log(" address: ", address.PubKeyToAddress(key.PubKey().Bytes())) t.Log(" address: ", address.PubKeyToAddress(key.PubKey().Bytes()))
} }
func TestDealOrder(t *testing.T) {
grpcClient := &typesmocks.Chain33Client{}
relayd := &Relayd{}
relayd.client33 = &Client33{}
relayd.client33.Chain33Client = grpcClient
relayd.btcClient = &btcdClient{
connConfig: nil,
chainParams: mainNetParams.Params,
reconnectAttempts: 3,
enqueueNotification: make(chan interface{}),
dequeueNotification: make(chan interface{}),
currentBlock: make(chan *blockStamp),
quit: make(chan struct{}),
}
relayorder := &types2.RelayOrder{Id: string("id"), XTxHash: "hash"}
rst := &types2.QueryRelayOrderResult{Orders: []*types2.RelayOrder{relayorder}}
reply := &types.Reply{}
reply.Msg = types.Encode(rst)
grpcClient.On("QueryChain", mock.Anything, mock.Anything).Return(reply, nil).Once()
grpcClient.On("SendTransaction", mock.Anything, mock.Anything).Return(nil, nil).Once()
relayd.dealOrder()
}
...@@ -5,20 +5,24 @@ source ../dapp-test-common.sh ...@@ -5,20 +5,24 @@ source ../dapp-test-common.sh
MAIN_HTTP="" MAIN_HTTP=""
relay_parallel_exec=""
relay_CreateRawRelaySaveBTCHeadTx() { relay_CreateRawRelaySaveBTCHeadTx() {
local req='{"method":"relay.CreateRawRelaySaveBTCHeadTx","params":[{"hash":"5e7d9c599cd040ec2ba53f4dee28028710be8c135e779f65c56feadaae34c3f2","height":10,"version":536870912,"merkleRoot":"ab91cd4160e1379c337eee6b7a4bdbb7399d70268d86045aba150743c00c90b6","time":1530862108,"nonce":0,"bits":545259519,"previousHash":"604efe53975ab06cad8748fd703ad5bc960e8b752b2aae98f0f871a4a05abfc7","isReset":true}]}' local req='{"method":"Chain33.CreateTransaction","params":[{"execer":"'"${relay_parallel_exec}"'","actionName":"BtcHeaders","payload":{"btcHeader":[{"hash":"5e7d9c599cd040ec2ba53f4dee28028710be8c135e779f65c56feadaae34c3f2","height":10,"version":536870912,"merkleRoot":"ab91cd4160e1379c337eee6b7a4bdbb7399d70268d86045aba150743c00c90b6","time":1530862108,"nonce":0,"bits":545259519,"previousHash":"604efe53975ab06cad8748fd703ad5bc960e8b752b2aae98f0f871a4a05abfc7","isReset":true}]}}]}'
chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result" chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result"
chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}" chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}"
} }
relay_CreateRawRelaySaveBTCHeadTx_11() { relay_CreateRawRelaySaveBTCHeadTx_11() {
local req='{"method":"relay.CreateRawRelaySaveBTCHeadTx","params":[{"hash":"7b7a4a9b49db5a1162be515d380cd186e98c2bf0bb90f1145485d7c43343fc7c","height":11,"version":536870912,"merkleRoot":"cfa9b66696aea63b7266ffaa1cb4b96c8dd6959eaabf2eb14173f4adaa551f6f","time":1530862108,"nonce":1,"bits":545259519,"previousHash":"5e7d9c599cd040ec2ba53f4dee28028710be8c135e779f65c56feadaae34c3f2","isReset":false}]}' local req='{"method":"Chain33.CreateTransaction","params":[{"execer":"'"${relay_parallel_exec}"'","actionName":"BtcHeaders","payload":{"btcHeader":[{"hash":"7b7a4a9b49db5a1162be515d380cd186e98c2bf0bb90f1145485d7c43343fc7c","height":11,"version":536870912,"merkleRoot":"cfa9b66696aea63b7266ffaa1cb4b96c8dd6959eaabf2eb14173f4adaa551f6f","time":1530862108,"nonce":1,"bits":545259519,"previousHash":"5e7d9c599cd040ec2ba53f4dee28028710be8c135e779f65c56feadaae34c3f2","isReset":false}]}}]}'
chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result" chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result"
chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}" chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}"
} }
relay_CreateRawRelayOrderTx() { relay_CreateRawRelayOrderTx() {
local req='{"method":"relay.CreateRawRelayOrderTx","params":[{"operation":0,"coin":"BTC","amount":299000000,"addr":"1Am9UTGfdnxabvcywYG2hvzr6qK8T3oUZT","btyAmount":1000000000,"coinWaits":6}]}' localCoinSymbol="$1"
localCoinExec="$2"
local req='{"method":"Chain33.CreateTransaction","params":[{"execer":"'"${relay_parallel_exec}"'","actionName":"Create","payload":{"operation":0,"xCoin":"BTC","xAmount":299000000,"xAddr":"1Am9UTGfdnxabvcywYG2hvzr6qK8T3oUZT","localCoinAmount":1000000000,"localCoinSymbol":"'"$localCoinSymbol"'","localCoinExec":"'"$localCoinExec"'","xBlockWaits":6}}]}'
chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result" chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result"
chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}" chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}"
} }
...@@ -33,7 +37,7 @@ relay_CreateRawRelayAcceptTx() { ...@@ -33,7 +37,7 @@ relay_CreateRawRelayAcceptTx() {
exit 1 exit 1
fi fi
local req='{"method":"relay.CreateRawRelayAcceptTx","params":[{"orderId":"'"$id"'","coinAddr":"1Am9UTGfdnxabvcywYG2hvzr6qK8T3oUZT"}]}' local req='{"method":"Chain33.CreateTransaction","params":[{"execer":"'"${relay_parallel_exec}"'","actionName":"Accept","payload":{"orderId":"'"$id"'","xAddr":"1Am9UTGfdnxabvcywYG2hvzr6qK8T3oUZT"}}]}'
chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result" chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result"
chain33_SignAndSendTx "$RETURN_RESP" "0xec9162ea5fc2f473ab8240619a0a0f495ba9e9e5d4d9c434b8794a68280236c4" "${MAIN_HTTP}" chain33_SignAndSendTx "$RETURN_RESP" "0xec9162ea5fc2f473ab8240619a0a0f495ba9e9e5d4d9c434b8794a68280236c4" "${MAIN_HTTP}"
} }
...@@ -48,7 +52,7 @@ relay_CreateRawRelayRevokeTx() { ...@@ -48,7 +52,7 @@ relay_CreateRawRelayRevokeTx() {
exit 1 exit 1
fi fi
local req='{"method":"relay.CreateRawRelayRevokeTx","params":[{"orderId":"'"$id"'","target":0,"action":1}]}' local req='{"method":"Chain33.CreateTransaction","params":[{"execer":"'"${relay_parallel_exec}"'","actionName":"Revoke","payload":{"orderId":"'"$id"'","target":0,"action":1}}]}'
chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result" chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result"
chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}" chain33_SignAndSendTx "$RETURN_RESP" "0x22968d29c6de695381a8719ef7bf00e2edb6cce500bb59a4fc73c41887610962" "${MAIN_HTTP}"
} }
...@@ -63,7 +67,7 @@ relay_CreateRawRelayConfirmTx() { ...@@ -63,7 +67,7 @@ relay_CreateRawRelayConfirmTx() {
exit 1 exit 1
fi fi
local req='{"method":"relay.CreateRawRelayConfirmTx","params":[{"orderId":"'"$id"'","rawTx":"6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4"}]}' local req='{"method":"Chain33.CreateTransaction","params":[{"execer":"'"${relay_parallel_exec}"'","actionName":"ConfirmTx","payload":{"orderId":"'"$id"'","txHash":"6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4"}}]}'
chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result" chain33_Http "$req" ${MAIN_HTTP} '(.error|not) and (.result != null)' "$FUNCNAME" ".result"
chain33_SignAndSendTx "$RETURN_RESP" "0xec9162ea5fc2f473ab8240619a0a0f495ba9e9e5d4d9c434b8794a68280236c4" "${MAIN_HTTP}" chain33_SignAndSendTx "$RETURN_RESP" "0xec9162ea5fc2f473ab8240619a0a0f495ba9e9e5d4d9c434b8794a68280236c4" "${MAIN_HTTP}"
} }
...@@ -76,7 +80,7 @@ query_GetRelayOrderByStatus() { ...@@ -76,7 +80,7 @@ query_GetRelayOrderByStatus() {
query_GetSellRelayOrder() { query_GetSellRelayOrder() {
local req='{"method":"Chain33.Query", "params":[{"execer":"relay","funcName":"GetSellRelayOrder","payload":{"addr":"1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3","status":"pending","coins":["BTC"],"pageNumber":0,"pageSize":0}}]}' local req='{"method":"Chain33.Query", "params":[{"execer":"relay","funcName":"GetSellRelayOrder","payload":{"addr":"1G5Cjy8LuQex2fuYv3gzb7B8MxAnxLEqt3","status":"pending","coins":["BTC"],"pageNumber":0,"pageSize":0}}]}'
resok='(.error|not) and (.result.relayorders[0].status == "pending") and (.result.relayorders[0].coinOperation == 0) and (.result.relayorders[0].id != null)' resok='(.error|not) and (.result.relayorders[0].status == "pending") and (.result.relayorders[0].operation == 0) and (.result.relayorders[0].id != null)'
chain33_Http "$req" ${MAIN_HTTP} "$resok" "$FUNCNAME" chain33_Http "$req" ${MAIN_HTTP} "$resok" "$FUNCNAME"
} }
...@@ -100,8 +104,10 @@ init() { ...@@ -100,8 +104,10 @@ init() {
echo "ipara=$ispara" echo "ipara=$ispara"
local relay_addr="" local relay_addr=""
if [ "$ispara" == true ]; then if [ "$ispara" == true ]; then
relay_parallel_exec="user.p.para.relay"
relay_addr=$(curl -ksd '{"method":"Chain33.ConvertExectoAddr","params":[{"execname":"user.p.para.relay"}]}' ${MAIN_HTTP} | jq -r ".result") relay_addr=$(curl -ksd '{"method":"Chain33.ConvertExectoAddr","params":[{"execname":"user.p.para.relay"}]}' ${MAIN_HTTP} | jq -r ".result")
else else
relay_parallel_exec="relay"
relay_addr=$(curl -ksd '{"method":"Chain33.ConvertExectoAddr","params":[{"execname":"relay"}]}' ${MAIN_HTTP} | jq -r ".result") relay_addr=$(curl -ksd '{"method":"Chain33.ConvertExectoAddr","params":[{"execname":"relay"}]}' ${MAIN_HTTP} | jq -r ".result")
fi fi
echo "relayaddr=$relay_addr" echo "relayaddr=$relay_addr"
...@@ -146,7 +152,13 @@ function run_testcases() { ...@@ -146,7 +152,13 @@ function run_testcases() {
relay_CreateRawRelaySaveBTCHeadTx relay_CreateRawRelaySaveBTCHeadTx
query_GetBTCHeaderCurHeight query_GetBTCHeaderCurHeight
relay_CreateRawRelayOrderTx ispara=$(echo '"'"${MAIN_HTTP}"'"' | jq '.|contains("8901")')
if [ "$ispara" == true ]; then
relay_CreateRawRelayOrderTx "GD"
else
relay_CreateRawRelayOrderTx
fi
query_GetSellRelayOrder query_GetSellRelayOrder
query_GetRelayOrderByStatus "pending" query_GetRelayOrderByStatus "pending"
......
...@@ -36,7 +36,6 @@ func RelayCmd() *cobra.Command { ...@@ -36,7 +36,6 @@ func RelayCmd() *cobra.Command {
CreateRawRelayAcceptTxCmd(), CreateRawRelayAcceptTxCmd(),
CreateRawRevokeTxCmd(), CreateRawRevokeTxCmd(),
CreateRawRelayConfirmTxCmd(), CreateRawRelayConfirmTxCmd(),
CreateRawRelayBtcHeaderCmd(),
) )
return cmd return cmd
...@@ -302,12 +301,12 @@ func parseRelayOrders(res ty.ReplyRelayOrders) { ...@@ -302,12 +301,12 @@ func parseRelayOrders(res ty.ReplyRelayOrders) {
show.OrderID = order.Id show.OrderID = order.Id
show.Status = order.Status.String() show.Status = order.Status.String()
show.Creator = order.CreaterAddr show.Creator = order.CreaterAddr
show.CoinOperation = ty.RelayOrderOperation[order.CoinOperation] show.CoinOperation = order.Operation
show.Amount = strconv.FormatFloat(float64(order.Amount)/float64(types.Coin), 'f', 4, 64) show.Amount = strconv.FormatFloat(float64(order.LocalCoinAmount)/float64(types.Coin), 'f', 4, 64)
show.Coin = order.Coin show.Coin = order.XCoin
show.CoinAddr = order.CoinAddr show.CoinAddr = order.XAddr
show.CoinAmount = strconv.FormatFloat(float64(order.CoinAmount)/float64(types.Coin), 'f', 4, 64) show.CoinAmount = strconv.FormatFloat(float64(order.XAmount)/float64(types.Coin), 'f', 4, 64)
show.CoinWaits = order.CoinWaits show.CoinWaits = order.XBlockWaits
show.CreateTime = order.CreateTime show.CreateTime = order.CreateTime
show.AcceptAddr = order.AcceptAddr show.AcceptAddr = order.AcceptAddr
show.AcceptTime = order.AcceptTime show.AcceptTime = order.AcceptTime
...@@ -315,6 +314,8 @@ func parseRelayOrders(res ty.ReplyRelayOrders) { ...@@ -315,6 +314,8 @@ func parseRelayOrders(res ty.ReplyRelayOrders) {
show.FinishTime = order.FinishTime show.FinishTime = order.FinishTime
show.FinishTxHash = order.FinishTxHash show.FinishTxHash = order.FinishTxHash
show.Height = order.Height show.Height = order.Height
show.LocalCoinExec = order.LocalCoinExec
show.LocalCoinSym = order.LocalCoinSymbol
data, err := json.MarshalIndent(show, "", " ") data, err := json.MarshalIndent(show, "", " ")
if err != nil { if err != nil {
...@@ -372,7 +373,7 @@ func addExchangeFlags(cmd *cobra.Command) { ...@@ -372,7 +373,7 @@ func addExchangeFlags(cmd *cobra.Command) {
} }
func relayOrder(cmd *cobra.Command, args []string) { func relayOrder(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
oper, _ := cmd.Flags().GetUint32("operation") oper, _ := cmd.Flags().GetUint32("operation")
coin, _ := cmd.Flags().GetString("coin") coin, _ := cmd.Flags().GetString("coin")
coinamount, _ := cmd.Flags().GetFloat64("coin_amount") coinamount, _ := cmd.Flags().GetFloat64("coin_amount")
...@@ -388,16 +389,36 @@ func relayOrder(cmd *cobra.Command, args []string) { ...@@ -388,16 +389,36 @@ func relayOrder(cmd *cobra.Command, args []string) {
coinUInt64 := uint64(coinamount * 1e4) coinUInt64 := uint64(coinamount * 1e4)
params := &ty.RelayCreate{ params := &ty.RelayCreate{
Operation: oper, Operation: oper,
Amount: coinUInt64 * 1e4, XAmount: coinUInt64 * 1e4,
Coin: coin, XCoin: coin,
Addr: coinaddr, XAddr: coinaddr,
CoinWaits: coinwait, XBlockWaits: coinwait,
BtyAmount: btyUInt64 * 1e4, LocalCoinAmount: btyUInt64 * 1e4,
}
payLoad, err := json.Marshal(params)
if err != nil {
return
}
createTx(cmd, payLoad, "Create")
}
func createTx(cmd *cobra.Command, payLoad []byte, action string) {
title, _ := cmd.Flags().GetString("title")
cfg := types.GetCliSysParam(title)
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
pm := &rpctypes.CreateTxIn{
Execer: cfg.ExecName(ty.RelayX),
ActionName: action,
Payload: payLoad,
} }
var res string var res string
ctx := jsonclient.NewRPCCtx(rpcLaddr, "relay.CreateRawRelayOrderTx", params, &res) ctx := jsonclient.NewRPCCtx(rpcLaddr, "Chain33.CreateTransaction", pm, &res)
ctx.RunWithoutMarshal() ctx.RunWithoutMarshal()
} }
...@@ -424,7 +445,6 @@ func addRelayAcceptFlags(cmd *cobra.Command) { ...@@ -424,7 +445,6 @@ func addRelayAcceptFlags(cmd *cobra.Command) {
} }
func relayAccept(cmd *cobra.Command, args []string) { func relayAccept(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
orderID, _ := cmd.Flags().GetString("order_id") orderID, _ := cmd.Flags().GetString("order_id")
coinaddr, _ := cmd.Flags().GetString("coin_addr") coinaddr, _ := cmd.Flags().GetString("coin_addr")
coinwait, _ := cmd.Flags().GetUint32("coin_wait") coinwait, _ := cmd.Flags().GetUint32("coin_wait")
...@@ -434,13 +454,17 @@ func relayAccept(cmd *cobra.Command, args []string) { ...@@ -434,13 +454,17 @@ func relayAccept(cmd *cobra.Command, args []string) {
} }
params := &ty.RelayAccept{ params := &ty.RelayAccept{
OrderId: orderID, OrderId: orderID,
CoinAddr: coinaddr, XAddr: coinaddr,
CoinWaits: coinwait, XBlockWaits: coinwait,
} }
var res string
ctx := jsonclient.NewRPCCtx(rpcLaddr, "relay.CreateRawRelayAcceptTx", params, &res) payLoad, err := json.Marshal(params)
ctx.RunWithoutMarshal() if err != nil {
return
}
createTx(cmd, payLoad, "Accept")
} }
// CreateRawRevokeTxCmd revoke order // CreateRawRevokeTxCmd revoke order
...@@ -467,7 +491,6 @@ func addRevokeFlags(cmd *cobra.Command) { ...@@ -467,7 +491,6 @@ func addRevokeFlags(cmd *cobra.Command) {
} }
func relayRevoke(cmd *cobra.Command, args []string) { func relayRevoke(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
orderID, _ := cmd.Flags().GetString("order_id") orderID, _ := cmd.Flags().GetString("order_id")
target, _ := cmd.Flags().GetUint32("target") target, _ := cmd.Flags().GetUint32("target")
act, _ := cmd.Flags().GetUint32("action") act, _ := cmd.Flags().GetUint32("action")
...@@ -477,9 +500,13 @@ func relayRevoke(cmd *cobra.Command, args []string) { ...@@ -477,9 +500,13 @@ func relayRevoke(cmd *cobra.Command, args []string) {
Target: target, Target: target,
Action: act, Action: act,
} }
var res string payLoad, err := json.Marshal(params)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "relay.CreateRawRelayRevokeTx", params, &res) if err != nil {
ctx.RunWithoutMarshal() return
}
createTx(cmd, payLoad, "Revoke")
} }
// CreateRawRelayConfirmTxCmd confirm tx // CreateRawRelayConfirmTxCmd confirm tx
...@@ -503,7 +530,6 @@ func addConfirmFlags(cmd *cobra.Command) { ...@@ -503,7 +530,6 @@ func addConfirmFlags(cmd *cobra.Command) {
} }
func relayConfirm(cmd *cobra.Command, args []string) { func relayConfirm(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
orderID, _ := cmd.Flags().GetString("order_id") orderID, _ := cmd.Flags().GetString("order_id")
txHash, _ := cmd.Flags().GetString("tx_hash") txHash, _ := cmd.Flags().GetString("tx_hash")
...@@ -511,56 +537,10 @@ func relayConfirm(cmd *cobra.Command, args []string) { ...@@ -511,56 +537,10 @@ func relayConfirm(cmd *cobra.Command, args []string) {
OrderId: orderID, OrderId: orderID,
TxHash: txHash, TxHash: txHash,
} }
var res string payLoad, err := json.Marshal(params)
ctx := jsonclient.NewRPCCtx(rpcLaddr, "relay.CreateRawRelayConfirmTx", params, &res) if err != nil {
ctx.RunWithoutMarshal() return
}
// CreateRawRelayBtcHeaderCmd save btc header from cli
func CreateRawRelayBtcHeaderCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "save_header",
Short: "save BTC header",
Run: relaySaveBtcHead,
}
addSaveBtcHeadFlags(cmd)
return cmd
}
func addSaveBtcHeadFlags(cmd *cobra.Command) {
cmd.Flags().StringP("block_hash", "b", "", "block hash")
cmd.MarkFlagRequired("block_hash")
cmd.Flags().StringP("pre_hash", "p", "", "previous block hash")
cmd.MarkFlagRequired("pre_hash")
cmd.Flags().StringP("merkle_root", "m", "", "merkle root")
cmd.MarkFlagRequired("merkle_root")
cmd.Flags().Uint64P("height", "t", 0, "block height")
cmd.MarkFlagRequired("height")
cmd.Flags().Int32P("flag", "g", 0, "reset height and save from current height")
}
func relaySaveBtcHead(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
blockhash, _ := cmd.Flags().GetString("block_hash")
prehash, _ := cmd.Flags().GetString("pre_hash")
merkleroot, _ := cmd.Flags().GetString("merkle_root")
height, _ := cmd.Flags().GetUint64("height")
flag, _ := cmd.Flags().GetInt32("flag")
params := &ty.BtcHeader{
Hash: blockhash,
PreviousHash: prehash,
MerkleRoot: merkleroot,
Height: height,
IsReset: flag == 1,
} }
var res string createTx(cmd, payLoad, "ConfirmTx")
ctx := jsonclient.NewRPCCtx(rpcLaddr, "relay.CreateRawRelaySaveBTCHeadTx", params, &res)
ctx.RunWithoutMarshal()
} }
...@@ -9,7 +9,7 @@ type relayOrder2Show struct { ...@@ -9,7 +9,7 @@ type relayOrder2Show struct {
Status string `json:"status"` Status string `json:"status"`
Creator string `json:"address"` Creator string `json:"address"`
Amount string `json:"amount"` Amount string `json:"amount"`
CoinOperation string `json:"coinoperation"` CoinOperation uint32 `json:"coinoperation"`
Coin string `json:"coin"` Coin string `json:"coin"`
CoinAmount string `json:"coinamount"` CoinAmount string `json:"coinamount"`
CoinAddr string `json:"coinaddr"` CoinAddr string `json:"coinaddr"`
...@@ -21,4 +21,6 @@ type relayOrder2Show struct { ...@@ -21,4 +21,6 @@ type relayOrder2Show struct {
FinishTime int64 `json:"finishtime"` FinishTime int64 `json:"finishtime"`
FinishTxHash string `json:"finishtxhash"` FinishTxHash string `json:"finishtxhash"`
Height int64 `json:"height"` Height int64 `json:"height"`
LocalCoinExec string `json:"localCoinExec"`
LocalCoinSym string `json:"localCoinSym"`
} }
...@@ -7,6 +7,8 @@ package executor ...@@ -7,6 +7,8 @@ package executor
import ( import (
"fmt" "fmt"
"strings"
ty "github.com/33cn/plugin/plugin/dapp/relay/types" ty "github.com/33cn/plugin/plugin/dapp/relay/types"
) )
...@@ -46,25 +48,25 @@ func calcBtcHeaderKeyHeightList(height int64) []byte { ...@@ -46,25 +48,25 @@ func calcBtcHeaderKeyHeightList(height int64) []byte {
func calcOrderKeyStatus(order *ty.RelayOrder, status int32) []byte { func calcOrderKeyStatus(order *ty.RelayOrder, status int32) []byte {
key := fmt.Sprintf(relayOrderSCAIH+"%d:%s:%s:%s:%d", key := fmt.Sprintf(relayOrderSCAIH+"%d:%s:%s:%s:%d",
status, order.Coin, order.CreaterAddr, order.Id, order.Height) status, order.XCoin, order.CreaterAddr, order.Id, order.Height)
return []byte(key) return []byte(key)
} }
func calcOrderKeyCoin(order *ty.RelayOrder, status int32) []byte { func calcOrderKeyCoin(order *ty.RelayOrder, status int32) []byte {
key := fmt.Sprintf(relayOrderCSAIH+"%s:%d:%s:%s:%d", key := fmt.Sprintf(relayOrderCSAIH+"%s:%d:%s:%s:%d",
order.Coin, status, order.CreaterAddr, order.Id, order.Height) order.XCoin, status, order.CreaterAddr, order.Id, order.Height)
return []byte(key) return []byte(key)
} }
func calcOrderKeyAddrStatus(order *ty.RelayOrder, status int32) []byte { func calcOrderKeyAddrStatus(order *ty.RelayOrder, status int32) []byte {
key := fmt.Sprintf(relayOrderASCIH+"%s:%d:%s:%s:%d", key := fmt.Sprintf(relayOrderASCIH+"%s:%d:%s:%s:%d",
order.CreaterAddr, status, order.Coin, order.Id, order.Height) order.CreaterAddr, status, order.XCoin, order.Id, order.Height)
return []byte(key) return []byte(key)
} }
func calcOrderKeyAddrCoin(order *ty.RelayOrder, status int32) []byte { func calcOrderKeyAddrCoin(order *ty.RelayOrder, status int32) []byte {
key := fmt.Sprintf(relayOrderACSIH+"%s:%s:%d:%s:%d", key := fmt.Sprintf(relayOrderACSIH+"%s:%s:%d:%s:%d",
order.CreaterAddr, order.Coin, status, order.Id, order.Height) order.CreaterAddr, order.XCoin, status, order.Id, order.Height)
return []byte(key) return []byte(key)
} }
...@@ -90,7 +92,7 @@ func calcOrderPrefixAddr(addr string) []byte { ...@@ -90,7 +92,7 @@ func calcOrderPrefixAddr(addr string) []byte {
func calcAcceptKeyAddr(order *ty.RelayOrder, status int32) []byte { func calcAcceptKeyAddr(order *ty.RelayOrder, status int32) []byte {
if order.AcceptAddr != "" { if order.AcceptAddr != "" {
return []byte(fmt.Sprintf(relayBuyOrderACSIH+"%s:%s:%d:%s:%d", return []byte(fmt.Sprintf(relayBuyOrderACSIH+"%s:%s:%d:%s:%d",
order.AcceptAddr, order.Coin, status, order.Id, order.Height)) order.AcceptAddr, order.XCoin, status, order.Id, order.Height))
} }
return nil return nil
...@@ -111,3 +113,9 @@ func calcRelayOrderID(hash string) string { ...@@ -111,3 +113,9 @@ func calcRelayOrderID(hash string) string {
func calcCoinHash(hash string) string { func calcCoinHash(hash string) string {
return coinHashPrefix + hash return coinHashPrefix + hash
} }
func getRealTxHashID(id string) string {
ids := strings.Split(id, "-")
return ids[len(ids)-1]
}
...@@ -133,6 +133,10 @@ func (r *relay) getRelayOrderReply(OrderIDs [][]byte) (types.Message, error) { ...@@ -133,6 +133,10 @@ func (r *relay) getRelayOrderReply(OrderIDs [][]byte) (types.Message, error) {
orderIDGot[string(orderID)] = true orderIDGot[string(orderID)] = true
} }
} }
//get remove mavl-xx- prefix
for _, order := range reply.Relayorders {
order.Id = getRealTxHashID(order.Id)
}
return &reply, nil return &reply, nil
} }
...@@ -142,7 +146,7 @@ func insertOrderDescending(toBeInserted *ty.RelayOrder, orders []*ty.RelayOrder) ...@@ -142,7 +146,7 @@ func insertOrderDescending(toBeInserted *ty.RelayOrder, orders []*ty.RelayOrder)
} else { } else {
index := len(orders) index := len(orders)
for i, element := range orders { for i, element := range orders {
if toBeInserted.Amount >= element.Amount { if toBeInserted.LocalCoinAmount >= element.LocalCoinAmount {
index = i index = i
break break
} }
......
...@@ -123,11 +123,11 @@ func (s *suiteRelay) testExecDelLocal(tx *types.Transaction, receipt *types.Rece ...@@ -123,11 +123,11 @@ func (s *suiteRelay) testExecDelLocal(tx *types.Transaction, receipt *types.Rece
//create sell //create sell
func (s *suiteRelay) TestExec_1() { func (s *suiteRelay) TestExec_1() {
order := &ty.RelayCreate{ order := &ty.RelayCreate{
Operation: ty.RelayOrderSell, Operation: ty.RelayOrderSell,
Coin: "BTC", XCoin: "BTC",
Amount: 0.299 * 1e8, XAmount: 0.299 * 1e8,
Addr: addrBtc, XAddr: addrBtc,
BtyAmount: 200 * 1e8, LocalCoinAmount: 200 * 1e8,
} }
sell := &ty.RelayAction{ sell := &ty.RelayAction{
...@@ -156,10 +156,10 @@ func (s *suiteRelay) TestExec_1() { ...@@ -156,10 +156,10 @@ func (s *suiteRelay) TestExec_1() {
var log ty.ReceiptRelayLog var log ty.ReceiptRelayLog
types.Decode(receipt.Logs[len(receipt.Logs)-1].Log, &log) types.Decode(receipt.Logs[len(receipt.Logs)-1].Log, &log)
s.Equal("200.0000", log.TxAmount) s.Equal("200.0000", log.LocalCoinAmount)
s.Equal(uint64(10), log.CoinHeight) s.Equal(uint64(10), log.XHeight)
s.orderID = log.OrderId s.orderID = getRealTxHashID(log.OrderId)
//s.testExecLocal(tx, receipt) //s.testExecLocal(tx, receipt)
//s.testExecDelLocal(tx, receipt) //s.testExecDelLocal(tx, receipt)
...@@ -169,8 +169,8 @@ func (s *suiteRelay) TestExec_1() { ...@@ -169,8 +169,8 @@ func (s *suiteRelay) TestExec_1() {
//accept //accept
func (s *suiteRelay) TestExec_2() { func (s *suiteRelay) TestExec_2() {
order := &ty.RelayAccept{ order := &ty.RelayAccept{
OrderId: s.orderID, OrderId: s.orderID,
CoinAddr: addrBtc, XAddr: addrBtc,
} }
sell := &ty.RelayAction{ sell := &ty.RelayAction{
...@@ -197,8 +197,8 @@ func (s *suiteRelay) TestExec_2() { ...@@ -197,8 +197,8 @@ func (s *suiteRelay) TestExec_2() {
var log ty.ReceiptRelayLog var log ty.ReceiptRelayLog
types.Decode(receipt.Logs[len(receipt.Logs)-1].Log, &log) types.Decode(receipt.Logs[len(receipt.Logs)-1].Log, &log)
s.Equal("200.0000", log.TxAmount) s.Equal("200.0000", log.LocalCoinAmount)
s.Equal(uint64(20), log.CoinHeight) s.Equal(uint64(20), log.XHeight)
s.Equal(ty.RelayOrderStatus_locking.String(), log.CurStatus) s.Equal(ty.RelayOrderStatus_locking.String(), log.CurStatus)
} }
...@@ -233,8 +233,8 @@ func (s *suiteRelay) TestExec_3() { ...@@ -233,8 +233,8 @@ func (s *suiteRelay) TestExec_3() {
var log ty.ReceiptRelayLog var log ty.ReceiptRelayLog
types.Decode(receipt.Logs[len(receipt.Logs)-1].Log, &log) types.Decode(receipt.Logs[len(receipt.Logs)-1].Log, &log)
s.Equal("200.0000", log.TxAmount) s.Equal("200.0000", log.LocalCoinAmount)
s.Equal(uint64(30), log.CoinHeight) s.Equal(uint64(30), log.XHeight)
s.Equal(ty.RelayOrderStatus_confirming.String(), log.CurStatus) s.Equal(ty.RelayOrderStatus_confirming.String(), log.CurStatus)
} }
...@@ -319,45 +319,15 @@ func (s *suiteRelay) TestExec_9_QryStatus1() { ...@@ -319,45 +319,15 @@ func (s *suiteRelay) TestExec_9_QryStatus1() {
} }
var OrderIds [][]byte var OrderIds [][]byte
OrderIds = append(OrderIds, []byte(s.orderID)) OrderIds = append(OrderIds, []byte(calcRelayOrderID(s.orderID)))
s.kvdb.On("List", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(OrderIds, nil).Once() s.kvdb.On("List", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(OrderIds, nil).Once()
msg, err := s.relay.Query_GetRelayOrderByStatus(addrCoins) msg, err := s.relay.Query_GetRelayOrderByStatus(addrCoins)
s.Nil(err) s.Nil(err)
//s.T().Log(msg.String()) s.T().Log(msg.String())
s.Contains(msg.String(), "status:finished") s.Contains(msg.String(), "status:finished")
//s.Equal(ty.RelayOrderStatus_finished,) //s.Equal(ty.RelayOrderStatus_finished,)
} }
func (s *suiteRelay) TestExec_9_QryStatus2() {
addrCoins := &ty.ReqRelayAddrCoins{
Addr: addrFrom,
//Status: ty.RelayOrderStatus_finished,
Coins: []string{"BTC"},
}
var OrderIds [][]byte
OrderIds = append(OrderIds, []byte(s.orderID))
s.kvdb.On("List", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(OrderIds, nil).Once()
msg, err := s.relay.Query_GetSellRelayOrder(addrCoins)
s.Nil(err)
s.Contains(msg.String(), "status:finished")
}
func (s *suiteRelay) TestExec_9_QryStatus3() {
addrCoins := &ty.ReqRelayAddrCoins{
Addr: addrTo,
//Status: ty.RelayOrderStatus_finished,
Coins: []string{"BTC"},
}
var OrderIds [][]byte
OrderIds = append(OrderIds, []byte(s.orderID))
s.kvdb.On("List", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(OrderIds, nil).Once()
msg, err := s.relay.Query_GetBuyRelayOrder(addrCoins)
s.Nil(err)
s.Contains(msg.String(), "status:finished")
}
func (s *suiteRelay) TestExec_9_QryStatus4() { func (s *suiteRelay) TestExec_9_QryStatus4() {
addrCoins := &ty.ReqRelayBtcHeaderHeightList{ addrCoins := &ty.ReqRelayBtcHeaderHeightList{
ReqHeight: 12, ReqHeight: 12,
......
...@@ -197,7 +197,7 @@ func (b *btcStore) getMerkleRootFromHeader(blockhash string) (string, error) { ...@@ -197,7 +197,7 @@ func (b *btcStore) getMerkleRootFromHeader(blockhash string) (string, error) {
func (b *btcStore) verifyBtcTx(verify *ty.RelayVerify, order *ty.RelayOrder) error { func (b *btcStore) verifyBtcTx(verify *ty.RelayVerify, order *ty.RelayOrder) error {
var foundtx bool var foundtx bool
for _, outtx := range verify.GetTx().GetVout() { for _, outtx := range verify.GetTx().GetVout() {
if outtx.Address == order.CoinAddr && outtx.Value >= order.CoinAmount { if outtx.Address == order.XAddr && outtx.Value >= order.XAmount {
foundtx = true foundtx = true
} }
} }
...@@ -220,7 +220,7 @@ func (b *btcStore) verifyBtcTx(verify *ty.RelayVerify, order *ty.RelayOrder) err ...@@ -220,7 +220,7 @@ func (b *btcStore) verifyBtcTx(verify *ty.RelayVerify, order *ty.RelayOrder) err
return err return err
} }
if verify.Tx.BlockHeight+uint64(order.CoinWaits) > uint64(height) { if verify.Tx.BlockHeight+uint64(order.XBlockWaits) > uint64(height) {
return ty.ErrRelayWaitBlocksErr return ty.ErrRelayWaitBlocksErr
} }
......
...@@ -197,8 +197,8 @@ func (s *suiteBtcStore) TestGetMerkleRootFromHeader() { ...@@ -197,8 +197,8 @@ func (s *suiteBtcStore) TestGetMerkleRootFromHeader() {
func (s *suiteBtcStore) TestVerifyBtcTx() { func (s *suiteBtcStore) TestVerifyBtcTx() {
order := &ty.RelayOrder{ order := &ty.RelayOrder{
CoinAddr: "1Am9UTGfdnxabvcywYG2hvzr6qK8T3oUZT", XAddr: "1Am9UTGfdnxabvcywYG2hvzr6qK8T3oUZT",
CoinAmount: 29900000, XAmount: 29900000,
AcceptTime: 100, AcceptTime: 100,
ConfirmTime: 200, ConfirmTime: 200,
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -25,40 +25,44 @@ message RelayAction { ...@@ -25,40 +25,44 @@ message RelayAction {
} }
message RelayOrder { message RelayOrder {
string id = 1; string id = 1;
RelayOrderStatus status = 2; RelayOrderStatus status = 2;
RelayOrderStatus preStatus = 3; RelayOrderStatus preStatus = 3;
uint64 amount = 4; uint64 localCoinAmount = 4;
string createrAddr = 5; string createrAddr = 5;
uint32 coinOperation = 6; uint32 operation = 6;
string coin = 7; string xCoin = 7;
uint64 coinAmount = 8; uint64 xAmount = 8;
string coinAddr = 9; string xAddr = 9;
string coinTxHash = 10; string xTxHash = 10;
int64 createTime = 11; int64 createTime = 11;
string acceptAddr = 12; string acceptAddr = 12;
int64 acceptTime = 13; int64 acceptTime = 13;
int64 confirmTime = 14; int64 confirmTime = 14;
int64 finishTime = 15; int64 finishTime = 15;
string finishTxHash = 16; string finishTxHash = 16;
int64 height = 17; int64 height = 17;
uint64 coinHeight = 18; uint64 XHeight = 18;
uint32 coinWaits = 19; uint32 xBlockWaits = 19;
string localCoinSymbol = 20;
string localCoinExec = 21;
} }
message RelayCreate { message RelayCreate {
uint32 operation = 1; // 0: buy, 1: sell uint32 operation = 1; // 0: buy, 1: sell
string coin = 2; // outside coin BTC, ETH... string xCoin = 2; // outside cross coin BTC, ETH...
uint64 amount = 3; uint64 xAmount = 3;
string addr = 4; string xAddr = 4;
uint64 btyAmount = 5; uint64 localCoinAmount = 5;
uint32 coinWaits = 6; // the coin blocks to wait uint32 xBlockWaits = 6; // the coin blocks to wait
string localCoinSymbol = 7;
string localCoinExec = 8;
} }
message RelayAccept { message RelayAccept {
string orderId = 1; string orderId = 1;
string coinAddr = 2; // for sell coin case needed string xAddr = 2; // for sell coin case needed
uint32 coinWaits = 3; uint32 xBlockWaits = 3;
} }
message RelayRevoke { message RelayRevoke {
...@@ -151,24 +155,26 @@ message ReceiptRelayRcvBTCHeaders { ...@@ -151,24 +155,26 @@ message ReceiptRelayRcvBTCHeaders {
} }
message ReceiptRelayLog { message ReceiptRelayLog {
string orderId = 1; string orderId = 1;
string curStatus = 2; string curStatus = 2;
string preStatus = 3; string preStatus = 3;
string txAmount = 4; string localCoinAmount = 4;
string createrAddr = 5; string createrAddr = 5;
string coinOperation = 6; uint32 coinOperation = 6;
string coin = 7; string xCoin = 7;
string coinAmount = 8; string xAmount = 8;
string coinAddr = 9; string xAddr = 9;
string coinTxHash = 10; string xTxHash = 10;
int64 createTime = 11; int64 createTime = 11;
string acceptAddr = 12; string acceptAddr = 12;
int64 acceptTime = 13; int64 acceptTime = 13;
int64 confirmTime = 14; int64 confirmTime = 14;
int64 finishTime = 15; int64 finishTime = 15;
string finishTxHash = 16; string finishTxHash = 16;
uint64 coinHeight = 17; uint64 xHeight = 17;
uint32 coinWaits = 18; uint32 xBlockWaits = 18;
string localCoinSymbol = 19;
string localCoinExec = 20;
} }
message ReqRelayAddrCoins { message ReqRelayAddrCoins {
......
...@@ -42,11 +42,6 @@ func TestJRPCChannel(t *testing.T) { ...@@ -42,11 +42,6 @@ func TestJRPCChannel(t *testing.T) {
{fn: testShowOnesAcceptRelayOrdersCmd}, {fn: testShowOnesAcceptRelayOrdersCmd},
{fn: testShowOnesStatusOrdersCmd}, {fn: testShowOnesStatusOrdersCmd},
{fn: testShowBTCHeadHeightListCmd}, {fn: testShowBTCHeadHeightListCmd},
{fn: testCreateRawRelayOrderTxCmd},
{fn: testCreateRawRelayAcceptTxCmd},
{fn: testCreateRawRevokeTxCmd},
{fn: testCreateRawRelayConfirmTxCmd},
{fn: testCreateRawRelayBtcHeaderCmd},
{fn: testGetBTCHeaderCurHeight}, {fn: testGetBTCHeaderCurHeight},
} }
for index, testCase := range testCases { for index, testCase := range testCases {
...@@ -105,36 +100,6 @@ func testShowBTCHeadHeightListCmd(t *testing.T, jrpc *jsonclient.JSONClient) err ...@@ -105,36 +100,6 @@ func testShowBTCHeadHeightListCmd(t *testing.T, jrpc *jsonclient.JSONClient) err
return jrpc.Call("Chain33.Query", params, rep) return jrpc.Call("Chain33.Query", params, rep)
} }
func testCreateRawRelayOrderTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := pty.RelayCreate{}
var res string
return jrpc.Call("relay.CreateRawRelayOrderTx", params, &res)
}
func testCreateRawRelayAcceptTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := pty.RelayAccept{}
var res string
return jrpc.Call("relay.CreateRawRelayAcceptTx", params, &res)
}
func testCreateRawRevokeTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := pty.RelayRevoke{}
var res string
return jrpc.Call("relay.CreateRawRelayRevokeTx", params, &res)
}
func testCreateRawRelayConfirmTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := pty.RelayConfirmTx{}
var res string
return jrpc.Call("relay.CreateRawRelayConfirmTx", params, &res)
}
func testCreateRawRelayBtcHeaderCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := pty.BtcHeader{}
var res string
return jrpc.Call("relay.CreateRawRelaySaveBTCHeadTx", params, &res)
}
func testGetBTCHeaderCurHeight(t *testing.T, jrpc *jsonclient.JSONClient) error { func testGetBTCHeaderCurHeight(t *testing.T, jrpc *jsonclient.JSONClient) error {
var params rpctypes.Query4Jrpc var params rpctypes.Query4Jrpc
req := &pty.ReqRelayBtcHeaderHeightList{} req := &pty.ReqRelayBtcHeaderHeightList{}
......
...@@ -3,119 +3,3 @@ ...@@ -3,119 +3,3 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
package rpc package rpc
import (
"encoding/hex"
"github.com/33cn/chain33/types"
ty "github.com/33cn/plugin/plugin/dapp/relay/types"
)
func createRawRelayOrderTx(cfg *types.Chain33Config, parm *ty.RelayCreate) ([]byte, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
v := *parm
return types.CallCreateTx(cfg, cfg.ExecName(ty.RelayX), "Create", &v)
}
func createRawRelayAcceptTx(cfg *types.Chain33Config, parm *ty.RelayAccept) ([]byte, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
return types.CallCreateTx(cfg, cfg.ExecName(ty.RelayX), "Accept", parm)
}
func createRawRelayRevokeTx(cfg *types.Chain33Config, parm *ty.RelayRevoke) ([]byte, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
return types.CallCreateTx(cfg, cfg.ExecName(ty.RelayX), "Revoke", parm)
}
func createRawRelayConfirmTx(cfg *types.Chain33Config, parm *ty.RelayConfirmTx) ([]byte, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
return types.CallCreateTx(cfg, cfg.ExecName(ty.RelayX), "ConfirmTx", parm)
}
func createRawRelaySaveBTCHeadTx(cfg *types.Chain33Config, parm *ty.BtcHeader) ([]byte, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
head := &ty.BtcHeader{
Hash: parm.Hash,
PreviousHash: parm.PreviousHash,
MerkleRoot: parm.MerkleRoot,
Height: parm.Height,
Version: parm.Version,
Time: parm.Time,
Nonce: parm.Nonce,
Bits: parm.Bits,
IsReset: parm.IsReset,
}
v := &ty.BtcHeaders{}
v.BtcHeader = append(v.BtcHeader, head)
return types.CallCreateTx(cfg, cfg.ExecName(ty.RelayX), "BtcHeaders", v)
}
//CreateRawRelayOrderTx jrpc create raw relay order
func (c *Jrpc) CreateRawRelayOrderTx(in *ty.RelayCreate, result *interface{}) error {
cfg := c.cli.GetConfig()
reply, err := createRawRelayOrderTx(cfg, in)
if err != nil {
return err
}
*result = hex.EncodeToString(reply)
return nil
}
//CreateRawRelayAcceptTx jrpc creat relay accept tx
func (c *Jrpc) CreateRawRelayAcceptTx(in *ty.RelayAccept, result *interface{}) error {
cfg := c.cli.GetConfig()
reply, err := createRawRelayAcceptTx(cfg, in)
if err != nil {
return err
}
*result = hex.EncodeToString(reply)
return nil
}
//CreateRawRelayRevokeTx jrpc create revoke tx
func (c *Jrpc) CreateRawRelayRevokeTx(in *ty.RelayRevoke, result *interface{}) error {
cfg := c.cli.GetConfig()
reply, err := createRawRelayRevokeTx(cfg, in)
if err != nil {
return err
}
*result = hex.EncodeToString(reply)
return nil
}
//CreateRawRelayConfirmTx jrpc create confirm tx
func (c *Jrpc) CreateRawRelayConfirmTx(in *ty.RelayConfirmTx, result *interface{}) error {
cfg := c.cli.GetConfig()
reply, err := createRawRelayConfirmTx(cfg, in)
if err != nil {
return err
}
*result = hex.EncodeToString(reply)
return nil
}
//CreateRawRelaySaveBTCHeadTx jrpc save btc header
func (c *Jrpc) CreateRawRelaySaveBTCHeadTx(in *ty.BtcHeader, result *interface{}) error {
cfg := c.cli.GetConfig()
reply, err := createRawRelaySaveBTCHeadTx(cfg, in)
if err != nil {
return err
}
*result = hex.EncodeToString(reply)
return nil
}
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
package types package types
import ( import (
"encoding/json"
"reflect" "reflect"
//log "github.com/33cn/chain33/common/log/log15" //log "github.com/33cn/chain33/common/log/log15"
...@@ -42,12 +41,6 @@ const ( ...@@ -42,12 +41,6 @@ const (
RelayOrderSell RelayOrderSell
) )
// RelayOrderOperation buy or sell operation
var RelayOrderOperation = map[uint32]string{
RelayOrderBuy: "buy",
RelayOrderSell: "sell",
}
const ( const (
// RelayUnlock revoke order // RelayUnlock revoke order
RelayUnlock = iota RelayUnlock = iota
...@@ -171,13 +164,7 @@ func (r *RelayType) Amount(tx *types.Transaction) (int64, error) { ...@@ -171,13 +164,7 @@ func (r *RelayType) Amount(tx *types.Transaction) (int64, error) {
} }
relay := data.(*RelayAction) relay := data.(*RelayAction)
if RelayActionCreate == relay.Ty && relay.GetCreate() != nil { if RelayActionCreate == relay.Ty && relay.GetCreate() != nil {
return int64(relay.GetCreate().BtyAmount), nil return int64(relay.GetCreate().LocalCoinAmount), nil
} }
return 0, nil return 0, nil
} }
// CreateTx relay create tx TODO 暂时不修改实现, 先完成结构的重构
func (r *RelayType) CreateTx(action string, message json.RawMessage) (*types.Transaction, error) {
var tx *types.Transaction
return tx, nil
}
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment