Merge branch 'danger' into duke
This commit is contained in:
@@ -43,7 +43,7 @@ If you don't see your idea listed, and you think it can contribute to Hush, do o
|
|||||||
|
|
||||||
## Style guide
|
## Style guide
|
||||||
|
|
||||||
Don't write shitty code.
|
Don't write shitty code. Try to avoid emulating jl777 code style, which is like a rabbit donkey smoked bath salts with nothing to read but a K+R C book.
|
||||||
|
|
||||||
## Setting up your environment
|
## Setting up your environment
|
||||||
|
|
||||||
|
|||||||
@@ -1,72 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Copyright ? various authors too lazy to put a copyright header
|
|
||||||
# Copyright 2019 The Hush Developers
|
|
||||||
|
|
||||||
PACKAGE_DIR="$@"
|
|
||||||
mkdir ${PACKAGE_DIR}
|
|
||||||
echo "Created ${PACKAGE_DIR}"
|
|
||||||
|
|
||||||
binaries=("komodo-cli" "komodod")
|
|
||||||
alllibs=()
|
|
||||||
for binary in "${binaries[@]}";
|
|
||||||
do
|
|
||||||
echo "Processing binary ${binary}"
|
|
||||||
# do the work in the destination directory
|
|
||||||
cp src/${binary} ${PACKAGE_DIR}
|
|
||||||
# find the dylibs to copy for komodod
|
|
||||||
DYLIBS=`otool -L ${PACKAGE_DIR}/${binary} | grep "/usr/local" | awk -F' ' '{ print $1 }'`
|
|
||||||
echo "copying ${DYLIBS} to ${PACKAGE_DIR}"
|
|
||||||
# copy the dylibs to the srcdir
|
|
||||||
for dylib in ${DYLIBS}; do cp -rf ${dylib} ${PACKAGE_DIR}; done
|
|
||||||
done
|
|
||||||
|
|
||||||
libraries=("libgcc_s.1.dylib" "libgomp.1.dylib" "libidn2.0.dylib" "libstdc++.6.dylib")
|
|
||||||
|
|
||||||
for binary in "${libraries[@]}";
|
|
||||||
do
|
|
||||||
echo "Processing binary ${binary}"
|
|
||||||
# find the dylibs to copy for komodod
|
|
||||||
DYLIBS=`otool -L ${PACKAGE_DIR}/${binary} | grep "/usr/local" | awk -F' ' '{ print $1 }'`
|
|
||||||
echo "copying ${DYLIBS} to ${PACKAGE_DIR}"
|
|
||||||
# copy the dylibs to the srcdir
|
|
||||||
for dylib in ${DYLIBS}; do cp -rf ${dylib} ${PACKAGE_DIR}; alllibs+=(${dylib}); done
|
|
||||||
done
|
|
||||||
|
|
||||||
indirectlibraries=("libintl.8.dylib" "libunistring.2.dylib")
|
|
||||||
|
|
||||||
for binary in "${indirectlibraries[@]}";
|
|
||||||
do
|
|
||||||
echo "Processing binary ${binary}"
|
|
||||||
# Need to undo this for the dylibs when we are done
|
|
||||||
chmod 755 src/${binary}
|
|
||||||
# find the dylibs to copy for komodod
|
|
||||||
DYLIBS=`otool -L ${PACKAGE_DIR}/${binary} | grep "/usr/local" | awk -F' ' '{ print $1 }'`
|
|
||||||
echo "copying indirect ${DYLIBS} to ${PACKAGE_DIR}"
|
|
||||||
# copy the dylibs to the dest dir
|
|
||||||
for dylib in ${DYLIBS}; do cp -rf ${dylib} ${PACKAGE_DIR}; alllibs+=(${dylib}); done
|
|
||||||
done
|
|
||||||
|
|
||||||
for binary in "${binaries[@]}";
|
|
||||||
do
|
|
||||||
echo "Processing binary ${binary}"
|
|
||||||
# modify komodod to point to dylibs
|
|
||||||
echo "modifying ${binary} to use local libraries"
|
|
||||||
for dylib in "${alllibs[@]}"
|
|
||||||
do
|
|
||||||
echo "Next lib is ${dylib} "
|
|
||||||
install_name_tool -change ${dylib} @executable_path/`basename ${dylib}` ${PACKAGE_DIR}/${binary}
|
|
||||||
done
|
|
||||||
chmod +x ${PACKAGE_DIR}/${binary}
|
|
||||||
done
|
|
||||||
|
|
||||||
for binary in "${libraries[@]}";
|
|
||||||
do
|
|
||||||
echo "Processing binary ${binary}"
|
|
||||||
# modify libraries to point to dylibs
|
|
||||||
echo "modifying ${binary} to use local libraries"
|
|
||||||
for dylib in "${alllibs[@]}"
|
|
||||||
do
|
|
||||||
echo "Next lib is ${dylib} "
|
|
||||||
install_name_tool -change ${dylib} @executable_path/`basename ${dylib}` ${PACKAGE_DIR}/${binary}
|
|
||||||
done
|
|
||||||
done
|
|
||||||
12
resolve.sh
12
resolve.sh
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
for f in $(git diff --name-only --diff-filter=U | cat); do
|
|
||||||
echo "Resolve conflict in $f ..."
|
|
||||||
git checkout --theirs $f
|
|
||||||
done
|
|
||||||
|
|
||||||
for f in $(git diff --name-only --diff-filter=U | cat); do
|
|
||||||
echo "Adding file $f ..."
|
|
||||||
git add $f
|
|
||||||
done
|
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=AXO $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BEER $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BET $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BNTN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BOTS $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BTCH $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CCL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CEAL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CHAIN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=COQUICASH $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CRYPTO $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=DEX $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=DION $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=DSEC $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=EQL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=ETOMIC $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=GLXT $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=HODL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=ILN $1 $2 $3 $4 $5 $6
|
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=ILN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=JUMBLR $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=K64 $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=KMDICE $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=KOIN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=KSB $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MESH $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MGNX $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MGW $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MNZ $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MORTY $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MSHARK $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=NINJA $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=OOT $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=OUR $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=PANGEA $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=PGT $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=PIRATE $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=PIZZA $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=PRLPAY $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=REVS $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=RICK $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=SUPERNET $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=THC $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=VOTE2018 $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=VOTE2019 $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=WLC $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=ZEXO $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,337 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"ac_name": "REVS",
|
|
||||||
"ac_supply": "1300000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "SUPERNET",
|
|
||||||
"ac_supply": "816061"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "DEX",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "PANGEA",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "JUMBLR",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "BET",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "CRYPTO",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "HODL",
|
|
||||||
"ac_supply": "9999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "MSHARK",
|
|
||||||
"ac_supply": "1400000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "BOTS",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "MGW",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "COQUICASH",
|
|
||||||
"ac_supply": "72000000",
|
|
||||||
"ac_reward": "7200000000",
|
|
||||||
"ac_staked": "50",
|
|
||||||
"ac_halving": "420000",
|
|
||||||
"ac_cc": "2",
|
|
||||||
"ac_ccenable": "227,235,236,241",
|
|
||||||
"addnode": [
|
|
||||||
"78.47.108.168"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "WLC",
|
|
||||||
"ac_supply": "210000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "KV",
|
|
||||||
"ac_supply": "1000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "CEAL",
|
|
||||||
"ac_supply": "366666666"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "MESH",
|
|
||||||
"ac_supply": "1000007"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "AXO",
|
|
||||||
"ac_supply": "200000000",
|
|
||||||
"ac_ccactivate": "130000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "ETOMIC",
|
|
||||||
"ac_supply": "100000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "BTCH",
|
|
||||||
"ac_supply": "20998641"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "NINJA",
|
|
||||||
"ac_supply": "100000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "OOT",
|
|
||||||
"ac_supply": "216000000",
|
|
||||||
"ac_sapling": "5000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "BNTN",
|
|
||||||
"ac_supply": "500000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "CHAIN",
|
|
||||||
"ac_supply": "999999"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "PRLPAY",
|
|
||||||
"ac_supply": "500000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "DSEC",
|
|
||||||
"ac_supply": "7000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "EQL",
|
|
||||||
"ac_supply": "500000000",
|
|
||||||
"ac_ccactivate": "205000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "ZILLA",
|
|
||||||
"ac_supply": "11000000",
|
|
||||||
"ac_sapling": "5000000",
|
|
||||||
"addnode": [
|
|
||||||
"51.68.215.104"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "RFOX",
|
|
||||||
"ac_supply": "1000000000",
|
|
||||||
"ac_reward": "100000000"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "SEC",
|
|
||||||
"ac_supply": "1000000000",
|
|
||||||
"ac_cc": "333"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "CCL",
|
|
||||||
"ac_supply": "200000000",
|
|
||||||
"ac_end": "1",
|
|
||||||
"ac_cc": "2",
|
|
||||||
"addressindex": "1",
|
|
||||||
"spentindex": "1",
|
|
||||||
"addnode": [
|
|
||||||
"142.93.136.89",
|
|
||||||
"195.201.22.89"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "PIRATE",
|
|
||||||
"ac_supply": "0",
|
|
||||||
"ac_reward": "25600000000",
|
|
||||||
"ac_halving": "77777",
|
|
||||||
"ac_private": "1",
|
|
||||||
"addnode": [
|
|
||||||
"136.243.102.225"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "PGT",
|
|
||||||
"ac_supply": "10000000",
|
|
||||||
"ac_end": "1",
|
|
||||||
"addnode": [
|
|
||||||
"190.114.254.104"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "DION",
|
|
||||||
"ac_supply": "3900000000",
|
|
||||||
"ac_reward": "22260000000",
|
|
||||||
"ac_staked": "100",
|
|
||||||
"ac_cc": "1",
|
|
||||||
"ac_end": "4300000000",
|
|
||||||
"addnode": [
|
|
||||||
"51.75.124.34"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "KMDICE",
|
|
||||||
"ac_supply": "10500000",
|
|
||||||
"ac_reward": "2500000000",
|
|
||||||
"ac_halving": "210000",
|
|
||||||
"ac_cc": "2",
|
|
||||||
"addressindex": "1",
|
|
||||||
"spentindex": "1",
|
|
||||||
"addnode": [
|
|
||||||
"144.76.217.232"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "KSB",
|
|
||||||
"ac_supply": "1000000000",
|
|
||||||
"ac_end": "1",
|
|
||||||
"ac_public": "1",
|
|
||||||
"addnode": [
|
|
||||||
"37.187.225.231"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "OUR",
|
|
||||||
"ac_reward": "1478310502",
|
|
||||||
"ac_halving": "525600",
|
|
||||||
"ac_cc": "42",
|
|
||||||
"ac_supply": "100000000",
|
|
||||||
"ac_perc": "77700",
|
|
||||||
"ac_staked": "93",
|
|
||||||
"ac_pubkey": "02652a3f3e00b3a1875a918314f0bac838d6dd189a346fa623f5efe9541ac0b98c",
|
|
||||||
"ac_public": "1",
|
|
||||||
"addnode": [
|
|
||||||
"51.255.195.65",
|
|
||||||
"217.182.129.38",
|
|
||||||
"37.187.225.231"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "ILN",
|
|
||||||
"ac_supply": "10000000000",
|
|
||||||
"ac_cc": "2",
|
|
||||||
"addnode": ["51.75.122.83"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "RICK",
|
|
||||||
"ac_supply": "90000000000",
|
|
||||||
"ac_reward": "100000000",
|
|
||||||
"ac_cc": "3",
|
|
||||||
"ac_staked": "10",
|
|
||||||
"addnode": [
|
|
||||||
"138.201.136.145",
|
|
||||||
"95.217.44.58"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "MORTY",
|
|
||||||
"ac_supply": "90000000000",
|
|
||||||
"ac_reward": "100000000",
|
|
||||||
"ac_cc": "3",
|
|
||||||
"ac_staked": "10",
|
|
||||||
"addnode": [
|
|
||||||
"138.201.136.145",
|
|
||||||
"95.217.44.58"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "KOIN",
|
|
||||||
"ac_supply": "125000000",
|
|
||||||
"addnode": ["3.0.32.10"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "ZEXO",
|
|
||||||
"ac_reward": "1478310502",
|
|
||||||
"ac_halving": "525600",
|
|
||||||
"ac_cc": "42",
|
|
||||||
"ac_ccenable": "236",
|
|
||||||
"ac_supply": "100000000",
|
|
||||||
"ac_perc": "77700",
|
|
||||||
"ac_staked": "93",
|
|
||||||
"ac_pubkey": "02713bd85e054db923694b6b7a85306264edf4d6bd6d331814f2b40af444b3ebbc",
|
|
||||||
"ac_public": "1",
|
|
||||||
"addnode": [
|
|
||||||
"195.201.20.230",
|
|
||||||
"80.240.17.222"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "K64",
|
|
||||||
"ac_reward": "0",
|
|
||||||
"ac_supply": "64000777",
|
|
||||||
"ac_staked": "10",
|
|
||||||
"addnode": ["18.197.20.21"]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "HUSH3",
|
|
||||||
"ac_sapling": "1",
|
|
||||||
"ac_founders": "1",
|
|
||||||
"ac_reward": "0,1125000000,562500000",
|
|
||||||
"ac_end": "128,340000,5422111",
|
|
||||||
"ac_blocktime": "150",
|
|
||||||
"ac_supply": "6178674",
|
|
||||||
"ac_halving": "129,340000,840000",
|
|
||||||
"ac_cc": "2",
|
|
||||||
"ac_cclib": "hush3",
|
|
||||||
"ac_ccenable": "228,234,235,236,241",
|
|
||||||
"ac_perc": "11111111",
|
|
||||||
"ac_eras": "3",
|
|
||||||
"ac_script": "76a9145eb10cf64f2bab1b457f1f25e658526155928fac88ac",
|
|
||||||
"clientname": "GoldenSandtrout",
|
|
||||||
"addnode": [
|
|
||||||
"188.165.212.101",
|
|
||||||
"136.243.227.142",
|
|
||||||
"5.9.224.250"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "THC",
|
|
||||||
"ac_supply": "251253103",
|
|
||||||
"ac_reward": "360000000,300000000,240000000,180000000,150000000,90000000,0",
|
|
||||||
"ac_staked": "100",
|
|
||||||
"ac_eras": "7",
|
|
||||||
"ac_end": "500001,1000001,1500001,2000001,2500001,4500001,0",
|
|
||||||
"ac_perc": "233333333",
|
|
||||||
"ac_cc": "2",
|
|
||||||
"ac_ccenable": "229,236,240",
|
|
||||||
"ac_script": "2ea22c8020987fad30df055db6fd922c3a57e55d76601229ed3da3b31340112e773df3d0d28103120c008203000401ccb8",
|
|
||||||
"ac_founders": "150",
|
|
||||||
"ac_cbmaturity": "1",
|
|
||||||
"ac_sapling": "1",
|
|
||||||
"earlytxid": "7e4a76259e99c9379551389e9f757fc5f46c33ae922a8644dc2b187af2a6adc1",
|
|
||||||
"addnode": [
|
|
||||||
"157.230.45.184",
|
|
||||||
"165.22.52.123"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "COMMOD",
|
|
||||||
"ac_supply": "0",
|
|
||||||
"ac_reward": "204800000000,100000000",
|
|
||||||
"ac_end": "482130,0",
|
|
||||||
"ac_halving": "43830,525960",
|
|
||||||
"ac_decay": "50000000,10000000",
|
|
||||||
"ac_eras": "2",
|
|
||||||
"ac_cc": "777",
|
|
||||||
"ac_public": "1",
|
|
||||||
"addnode": [
|
|
||||||
"34.246.186.176",
|
|
||||||
"34.251.151.148"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ac_name": "WLC21",
|
|
||||||
"ac_supply": "21000000",
|
|
||||||
"ac_reward": "190258751",
|
|
||||||
"ac_staked": "90",
|
|
||||||
"ac_public": "1",
|
|
||||||
"addnode": [
|
|
||||||
"37.187.225.231",
|
|
||||||
"51.38.38.134"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -x
|
|
||||||
delay=60
|
|
||||||
source pubkey.txt
|
|
||||||
echo $pubkey
|
|
||||||
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=MSHARK -ac_supply=1400000 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=COQUICASH -ac_supply=72000000 -ac_reward=7200000000 -ac_staked=50 -ac_halving=420000 -ac_cc=2 -ac_ccenable=227,235,236,241 -addnode=78.47.108.168 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=WLC -ac_supply=210000000 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=KV -ac_supply=1000000 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=CEAL -ac_supply=366666666 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=MESH -ac_supply=1000007 -addnode=95.213.238.98 $1 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=AXO -ac_supply=200000000 -ac_ccactivate=130000 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=ETOMIC -ac_supply=100000000 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=BTCH -ac_supply=20998641 -addnode=95.213.238.98 &
|
|
||||||
#./komodod -pubkey=$pubkey -ac_name=BEER -ac_supply=100000000 -addnode=95.213.238.98 &
|
|
||||||
#./komodod -pubkey=$pubkey -ac_name=PIZZA -ac_supply=100000000 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=NINJA -ac_supply=100000000 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=OOT -ac_supply=216000000 -ac_sapling=5000000 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=BNTN -ac_supply=500000000 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=CHAIN -ac_supply=999999 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=PRLPAY -ac_supply=500000000 -addnode=13.250.226.125 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=DSEC -ac_supply=7000000 -addnode=185.148.147.30 &
|
|
||||||
#./komodod -pubkey=$pubkey -ac_name=GLXT -ac_supply=10000000000 -addnode=13.230.224.15 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=EQL -ac_supply=500000000 -ac_ccactivate=205000 -addnode=46.101.124.153 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=ZILLA -ac_supply=11000000 -ac_sapling=5000000 -addnode=51.68.215.104 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=RFOX -ac_supply=1000000000 -ac_reward=100000000 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=SEC -ac_cc=333 -ac_supply=1000000000 -addnode=185.148.145.43 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=CCL -ac_supply=200000000 -ac_end=1 -ac_cc=2 -addressindex=1 -spentindex=1 -addnode=142.93.136.89 -addnode=195.201.22.89 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=PIRATE -ac_supply=0 -ac_reward=25600000000 -ac_halving=77777 -ac_private=1 -addnode=178.63.77.56 &
|
|
||||||
#./komodod -pubkey=$pubkey -ac_name=MGNX -ac_supply=12465003 -ac_staked=90 -ac_reward=2000000000 -ac_halving=525960 -ac_cc=2 -ac_end=2629800 -addnode=142.93.27.180 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=PGT -ac_supply=10000000 -ac_end=1 -addnode=190.114.254.104 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=KMDICE -ac_supply=10500000 -ac_reward=2500000000 -ac_halving=210000 -ac_cc=2 -addressindex=1 -spentindex=1 -addnode=144.76.217.232 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=DION -ac_supply=3900000000 -ac_reward=22260000000 -ac_staked=100 -ac_cc=1 -ac_end=4300000000 -addnode=51.75.124.34 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=KSB -ac_supply=1000000000 -ac_end=1 -ac_public=1 -addnode=37.187.225.231 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=OUR -ac_reward=1478310502 -ac_halving=525600 -ac_cc=42 -ac_supply=100000000 -ac_perc=77700 -ac_staked=93 -ac_pubkey=02652a3f3e00b3a1875a918314f0bac838d6dd189a346fa623f5efe9541ac0b98c -ac_public=1 -addnode=51.255.195.65 -addnode=217.182.129.38 -addnode=37.187.225.231 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=ILN -ac_supply=10000000000 -ac_cc=2 -addressindex=1 -spentindex=1 -addnode=51.75.122.83 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=RICK -ac_supply=90000000000 -ac_reward=100000000 -ac_cc=3 -ac_staked=10 -addnode=95.217.44.58 -addnode=138.201.136.145 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=MORTY -ac_supply=90000000000 -ac_reward=100000000 -ac_cc=3 -ac_staked=10 -addnode=95.217.44.58 -addnode=138.201.136.145 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=VOTE2019 -ac_supply=123651638 -ac_public=1 -addnode=95.213.238.98 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=KOIN -ac_supply=125000000 -addnode=3.0.32.10 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=ZEXO -ac_supply=100000000 -ac_reward=1478310502 -ac_halving=525600 -ac_cc=42 -ac_ccenable=236 -ac_perc=77700 -ac_staked=93 -ac_pubkey=02713bd85e054db923694b6b7a85306264edf4d6bd6d331814f2b40af444b3ebbc -ac_public=1 -addnode=80.240.17.222 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=K64 -ac_supply=64000777 -ac_reward=0 -ac_staked=10 -addnode=18.197.20.211 &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=HUSH3 -ac_sapling=1 -ac_reward=0,1125000000,562500000 -ac_halving=129,340000,840000 -ac_end=128,340000,5422111 -ac_eras=3 -ac_blocktime=150 -ac_cc=2 -ac_ccenable=228,234,235,236,241 -ac_founders=1 -ac_supply=6178674 -ac_perc=11111111 -clientname=GoldenSandtrout -addnode=188.165.212.101 -addnode=136.243.227.142 -addnode=5.9.224.250 -ac_cclib=hush3 -ac_script=76a9145eb10cf64f2bab1b457f1f25e658526155928fac88ac &
|
|
||||||
./komodod -pubkey=$pubkey -ac_name=THC -ac_supply=251253103 -ac_reward=360000000,300000000,240000000,180000000,150000000,90000000,0 -ac_staked=100 -ac_eras=7 -ac_end=500001,1000001,1500001,2000001,2500001,4500001,0 -ac_perc=233333333 -ac_cc=2 -ac_ccenable=229,236,240 -ac_script=2ea22c8020987fad30df055db6fd922c3a57e55d76601229ed3da3b31340112e773df3d0d28103120c008203000401ccb8 -ac_founders=150 -ac_cbmaturity=1 -ac_sapling=1 -addnode=157.230.45.184 -addnode=165.22.52.123 -earlytxid=7e4a76259e99c9379551389e9f757fc5f46c33ae922a8644dc2b187af2a6adc1 &
|
|
||||||
@@ -309,8 +309,8 @@ int32_t myGet_mempool_txs(std::vector<CTransaction> &txs,uint8_t evalcode,uint8_
|
|||||||
/// \endcond
|
/// \endcond
|
||||||
|
|
||||||
/// \cond INTERNAL
|
/// \cond INTERNAL
|
||||||
int32_t iguana_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
||||||
int32_t iguana_rwbignum(int32_t rwflag,uint8_t *serialized,int32_t len,uint8_t *endianedp);
|
int32_t dragon_rwbignum(int32_t rwflag,uint8_t *serialized,int32_t len,uint8_t *endianedp);
|
||||||
/// \endcond
|
/// \endcond
|
||||||
|
|
||||||
CScript GetScriptForMultisig(int nRequired, const std::vector<CPubKey>& keys);
|
CScript GetScriptForMultisig(int nRequired, const std::vector<CPubKey>& keys);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#ifndef OS_PORTABLEH
|
#ifndef OS_PORTABLEH
|
||||||
#define OS_PORTABLEH
|
#define OS_PORTABLEH
|
||||||
|
|
||||||
// iguana_OS has functions that invoke system calls. Whenever possible stdio and similar functions are use and most functions are fully portable and in this file. For things that require OS specific, the call is routed to iguana_OS_portable_* Usually, all but one OS can be handled with the same code, so iguana_OS_portable.c has most of this shared logic and an #ifdef iguana_OS_nonportable.c
|
// dragon_OS has functions that invoke system calls. Whenever possible stdio and similar functions are use and most functions are fully portable and in this file. For things that require OS specific, the call is routed to dragon_OS_portable_* Usually, all but one OS can be handled with the same code, so dragon_OS_portable.c has most of this shared logic and an #ifdef dragon_OS_nonportable.c
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
//#define LIQUIDITY_PROVIDER 1
|
//#define LIQUIDITY_PROVIDER 1
|
||||||
@@ -279,19 +279,19 @@ void *queue_clone(queue_t *clone,queue_t *queue,int32_t size);
|
|||||||
int32_t queue_size(queue_t *queue);
|
int32_t queue_size(queue_t *queue);
|
||||||
char *mbstr(char *str,double n);
|
char *mbstr(char *str,double n);
|
||||||
|
|
||||||
void iguana_memreset(struct OS_memspace *mem);
|
void dragon_memreset(struct OS_memspace *mem);
|
||||||
void iguana_mempurge(struct OS_memspace *mem);
|
void dragon_mempurge(struct OS_memspace *mem);
|
||||||
void *iguana_meminit(struct OS_memspace *mem,char *name,void *ptr,int64_t totalsize,int32_t threadsafe);
|
void *dragon_meminit(struct OS_memspace *mem,char *name,void *ptr,int64_t totalsize,int32_t threadsafe);
|
||||||
void *iguana_memalloc(struct OS_memspace *mem,long size,int32_t clearflag);
|
void *dragon_memalloc(struct OS_memspace *mem,long size,int32_t clearflag);
|
||||||
int64_t iguana_memfree(struct OS_memspace *mem,void *ptr,int32_t size);
|
int64_t dragon_memfree(struct OS_memspace *mem,void *ptr,int32_t size);
|
||||||
|
|
||||||
// generic functions
|
// generic functions
|
||||||
bits256 iguana_merkle(char *symbol,bits256 *tree,int32_t txn_count);
|
bits256 dragon_merkle(char *symbol,bits256 *tree,int32_t txn_count);
|
||||||
bits256 bits256_calctxid(char *symbol,uint8_t *serialized,int32_t len);
|
bits256 bits256_calctxid(char *symbol,uint8_t *serialized,int32_t len);
|
||||||
int32_t unhex(char c);
|
int32_t unhex(char c);
|
||||||
void touppercase(char *str);
|
void touppercase(char *str);
|
||||||
uint32_t is_ipaddr(char *str);
|
uint32_t is_ipaddr(char *str);
|
||||||
void iguana_bitmap(char *space,int32_t max,char *name);
|
void dragon_bitmap(char *space,int32_t max,char *name);
|
||||||
double _pairaved(double valA,double valB);
|
double _pairaved(double valA,double valB);
|
||||||
int32_t unstringbits(char *buf,uint64_t bits);
|
int32_t unstringbits(char *buf,uint64_t bits);
|
||||||
uint64_t stringbits(char *str);
|
uint64_t stringbits(char *str);
|
||||||
@@ -383,26 +383,26 @@ void expand_ipbits(char *ipaddr,uint64_t ipbits);
|
|||||||
void escape_code(char *escaped,char *str);
|
void escape_code(char *escaped,char *str);
|
||||||
void SaM_PrepareIndices(void);
|
void SaM_PrepareIndices(void);
|
||||||
|
|
||||||
// iguana_serdes.c
|
// dragon_serdes.c
|
||||||
#ifndef IGUANA_LOG2PACKETSIZE
|
#ifndef IGUANA_LOG2PACKETSIZE
|
||||||
#define IGUANA_LOG2PACKETSIZE 22
|
#define IGUANA_LOG2PACKETSIZE 22
|
||||||
#endif
|
#endif
|
||||||
#ifndef IGUANA_MAXPACKETSIZE
|
#ifndef IGUANA_MAXPACKETSIZE
|
||||||
#define IGUANA_MAXPACKETSIZE (1 << IGUANA_LOG2PACKETSIZE)
|
#define IGUANA_MAXPACKETSIZE (1 << IGUANA_LOG2PACKETSIZE)
|
||||||
#endif
|
#endif
|
||||||
struct iguana_msghdr { uint8_t netmagic[4]; char command[12]; uint8_t serdatalen[4],hash[4]; } PACKED;
|
struct dragon_msghdr { uint8_t netmagic[4]; char command[12]; uint8_t serdatalen[4],hash[4]; } PACKED;
|
||||||
|
|
||||||
int32_t iguana_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
||||||
int32_t iguana_validatehdr(char *symbol,struct iguana_msghdr *H);
|
int32_t dragon_validatehdr(char *symbol,struct dragon_msghdr *H);
|
||||||
int32_t iguana_rwbignum(int32_t rwflag,uint8_t *serialized,int32_t len,uint8_t *endianedp);
|
int32_t dragon_rwbignum(int32_t rwflag,uint8_t *serialized,int32_t len,uint8_t *endianedp);
|
||||||
int32_t iguana_sethdr(struct iguana_msghdr *H,const uint8_t netmagic[4],char *command,uint8_t *data,int32_t datalen);
|
int32_t dragon_sethdr(struct dragon_msghdr *H,const uint8_t netmagic[4],char *command,uint8_t *data,int32_t datalen);
|
||||||
uint8_t *iguana_varint16(int32_t rwflag,uint8_t *serialized,uint16_t *varint16p);
|
uint8_t *dragon_varint16(int32_t rwflag,uint8_t *serialized,uint16_t *varint16p);
|
||||||
uint8_t *iguana_varint32(int32_t rwflag,uint8_t *serialized,uint16_t *varint16p);
|
uint8_t *dragon_varint32(int32_t rwflag,uint8_t *serialized,uint16_t *varint16p);
|
||||||
uint8_t *iguana_varint64(int32_t rwflag,uint8_t *serialized,uint32_t *varint32p);
|
uint8_t *dragon_varint64(int32_t rwflag,uint8_t *serialized,uint32_t *varint32p);
|
||||||
int32_t iguana_rwvarint(int32_t rwflag,uint8_t *serialized,uint64_t *varint64p);
|
int32_t dragon_rwvarint(int32_t rwflag,uint8_t *serialized,uint64_t *varint64p);
|
||||||
int32_t iguana_rwvarint32(int32_t rwflag,uint8_t *serialized,uint32_t *int32p);
|
int32_t dragon_rwvarint32(int32_t rwflag,uint8_t *serialized,uint32_t *int32p);
|
||||||
int32_t iguana_rwvarstr(int32_t rwflag,uint8_t *serialized,int32_t maxlen,char *endianedp);
|
int32_t dragon_rwvarstr(int32_t rwflag,uint8_t *serialized,int32_t maxlen,char *endianedp);
|
||||||
int32_t iguana_rwmem(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
int32_t dragon_rwmem(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
||||||
#define bits256_nonz(a) (((a).ulongs[0] | (a).ulongs[1] | (a).ulongs[2] | (a).ulongs[3]) != 0)
|
#define bits256_nonz(a) (((a).ulongs[0] | (a).ulongs[1] | (a).ulongs[2] | (a).ulongs[3]) != 0)
|
||||||
|
|
||||||
bits256 bits256_ave(bits256 a,bits256 b);
|
bits256 bits256_ave(bits256 a,bits256 b);
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
# Copyright 2020 The Hush Developers
|
# Copyright 2020 The Hush Developers
|
||||||
# just type make to compile all dapps
|
# Just type make to compile all dat dapp code, fellow cypherpunk
|
||||||
all: zmigrate oraclefeed
|
|
||||||
|
|
||||||
subatomic:
|
# we no longer build zmigrate by default, nobody uses that fucking code
|
||||||
$(CC) subatomic.c -o subatomic -lm
|
all: hushdex
|
||||||
|
|
||||||
|
hushdex:
|
||||||
|
$(CC) hushdex.c -o hushdex -lm
|
||||||
|
|
||||||
|
# Just for historical knowledge, to study how fucking stupid
|
||||||
|
# ZEC+KMD were to still support sprout, to this day!!!!!!!!
|
||||||
zmigrate:
|
zmigrate:
|
||||||
$(CC) zmigrate.c -o zmigrate -lm
|
$(CC) zmigrate.c -o zmigrate -lm
|
||||||
|
|
||||||
oraclefeed:
|
|
||||||
$(CC) oraclefeed.c -o oraclefeed -lm
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm zmigrate oraclefeed
|
rm zmigrate
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ To compile all dapps in this directory:
|
|||||||
## zmigrate - Sprout to Sapling Migration dApp
|
## zmigrate - Sprout to Sapling Migration dApp
|
||||||
|
|
||||||
This tool converts Sprout zaddress funds into Sapling funds in a new Sapling address.
|
This tool converts Sprout zaddress funds into Sapling funds in a new Sapling address.
|
||||||
|
This is not applicable to HUSH3, since we have no Sprout funds, but left for historical
|
||||||
|
purposes.
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
@@ -19,10 +21,52 @@ The above command may need to be run multiple times to complete the process.
|
|||||||
This CLI implementation will be called by GUI wallets, average users do not
|
This CLI implementation will be called by GUI wallets, average users do not
|
||||||
need to worry about using this low-level tool.
|
need to worry about using this low-level tool.
|
||||||
|
|
||||||
## oraclefeed - feed of price data using oracles
|
## HushDEX
|
||||||
|
|
||||||
### Usage
|
HushDEX forked from the Subatomic Decentralized App (dapp) and we focus purely
|
||||||
|
on privacy coin swaps, and specifically, shielded swaps between Zcash Protocol
|
||||||
|
coins. These are called z-swaps.
|
||||||
|
|
||||||
./oraclefeed $ACNAME $ORACLETXID $MYPUBKEY $FORMAT $BINDTXID [refcoin_cli]
|
### Z-swap example
|
||||||
|
|
||||||
|
Alice has 1 ZEC and wants to trade it for 5 HUSH, since she hears HushChat is
|
||||||
|
pretty awesome and ZEC just goes down in price, always. We represent this in
|
||||||
|
a diagram like this
|
||||||
|
|
||||||
|
Alice (ZEC) <> Bob (HUSH)
|
||||||
|
|
||||||
|
HushDEX is only concerns with Sapling shielded addresses (zaddrs) which start
|
||||||
|
with `zs1`. Even though ZEC supports Sprout addresses (which start with `zc`),
|
||||||
|
they cannot be used on HushDEX. Sprout is unsupported on HushDEX.
|
||||||
|
|
||||||
|
So Alice must make sure her ZEC is in a Sapling zaddr, and then she can use
|
||||||
|
HushDEX on her computer, to z-swap with Bob, in a decentralized way, with
|
||||||
|
no centralized service. The system is not completely trustless, users must
|
||||||
|
trust the developers and miners on the relevant chains to not do nefarious
|
||||||
|
things. There is no central authority to decide who gets to do what, it's
|
||||||
|
peer-to-peer like BitTorrent or Tor.
|
||||||
|
|
||||||
|
### Privacy Features of Z-Swaps
|
||||||
|
|
||||||
|
* No KYC
|
||||||
|
* We will not feed the identity theft industry any more free data
|
||||||
|
* No IP address limiting
|
||||||
|
* It is trivial to pay for an IP address from any country in the world
|
||||||
|
* Alice's address never appears in public data
|
||||||
|
* Bob's address never appears in public data
|
||||||
|
* Consequently, Alice and Bob's address cannot be searched for on an explorer
|
||||||
|
* Since you can't see the address of any transaction, you cannot infer if
|
||||||
|
the same address appears as sender or receiver in many transactions.
|
||||||
|
* The amount of the transaction, how much ZEC and how much HUSH, is unknown
|
||||||
|
* It could be pennies or millions
|
||||||
|
* The exchange rate of the transaction never appears on the blockchain
|
||||||
|
* The exchange rate will be leaked to the network p2p layer, but it is never
|
||||||
|
recorded in blockchain history. If you are not there to record it, it is gone.
|
||||||
|
* Realistically, it's simple to run a malicious node which records all exchange rates
|
||||||
|
and so we assume an adversary does this
|
||||||
|
* Since the exchange rate of ZEC/HUSH is already public data, this is not considered valuable
|
||||||
|
information leakage. We are leaking the differential of CEX ZEC/HUSH exchange ratio to
|
||||||
|
this DEX's ratio.
|
||||||
|
* Adversaries watching all possible public data can infer exchange ratios but no amounts
|
||||||
|
or addresses, which is considered a massive blow against blockchain analysis.
|
||||||
|
|
||||||
Supported formats are L and Ihh. Price data from CoinDesk API.
|
|
||||||
|
|||||||
@@ -349,7 +349,7 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char
|
|||||||
sprintf(cmdstr,"%s %s %s %s %s %s %s %s %s > %s\n",REFCOIN_CLI,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname);
|
sprintf(cmdstr,"%s %s %s %s %s %s %s %s %s > %s\n",REFCOIN_CLI,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname);
|
||||||
//printf("ref.(%s) REFCOIN_CLI (%s)\n",refcoin,cmdstr);
|
//printf("ref.(%s) REFCOIN_CLI (%s)\n",refcoin,cmdstr);
|
||||||
}
|
}
|
||||||
//fprintf(stderr,"system(%s)\n",cmdstr);
|
//fprintf(stderr,"system(%s)\n",cmdstr);
|
||||||
system(cmdstr);
|
system(cmdstr);
|
||||||
*retstrp = 0;
|
*retstrp = 0;
|
||||||
if ( (jsonstr= filestr(&fsize,fname)) != 0 )
|
if ( (jsonstr= filestr(&fsize,fname)) != 0 )
|
||||||
@@ -364,12 +364,13 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char
|
|||||||
return(retjson);
|
return(retjson);
|
||||||
}
|
}
|
||||||
|
|
||||||
cJSON *subatomic_cli(char *clistr,char **retstrp,char *method,char *arg0,char *arg1,char *arg2,char *arg3,char *arg4,char *arg5,char *arg6)
|
cJSON *hushdex_cli(char *clistr,char **retstrp,char *method,char *arg0,char *arg1,char *arg2,char *arg3,char *arg4,char *arg5,char *arg6)
|
||||||
{
|
{
|
||||||
long fsize; cJSON *retjson = 0; char cmdstr[32768],*jsonstr,fname[32768];
|
long fsize; cJSON *retjson = 0; char cmdstr[32768],*jsonstr,fname[32768];
|
||||||
sprintf(fname,"/tmp/subatomic_%s_%d",method,(rand() >> 17) % 10000);
|
//TODO: fix this shitty insecure jl777 fucktwattery
|
||||||
|
sprintf(fname,"/tmp/hushdex_%s_%d",method,(rand() >> 17) % 10000);
|
||||||
sprintf(cmdstr,"%s %s %s %s %s %s %s %s %s > %s\n",clistr,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname);
|
sprintf(cmdstr,"%s %s %s %s %s %s %s %s %s > %s\n",clistr,method,arg0,arg1,arg2,arg3,arg4,arg5,arg6,fname);
|
||||||
//fprintf(stderr,"system(%s)\n",cmdstr);
|
//fprintf(stderr,"system(%s)\n",cmdstr);
|
||||||
system(cmdstr);
|
system(cmdstr);
|
||||||
*retstrp = 0;
|
*retstrp = 0;
|
||||||
if ( (jsonstr= filestr(&fsize,fname)) != 0 )
|
if ( (jsonstr= filestr(&fsize,fname)) != 0 )
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright (c) 2019-2020 The Hush developers
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Copyright © 2014-2020 The SuperNET Developers. *
|
* Copyright © 2014-2020 The SuperNET Developers. *
|
||||||
* *
|
* *
|
||||||
@@ -13,18 +14,18 @@
|
|||||||
* *
|
* *
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// build subatomic and put in path: git pull; gcc cc/dapps/subatomic.c -lm -o subatomic; cp subatomic /usr/bin
|
// build hushdex and put in path: git pull; gcc cc/dapps/hushdex.c -lm -o hushdex; cp hushdex /usr/bin
|
||||||
// alice sends relcoin and gets basecoin
|
// alice sends relcoin and gets basecoin
|
||||||
|
|
||||||
#define DEXP2P_CHAIN ((char *)"DEX")
|
#define DEXP2P_CHAIN ((char *)"ZEX")
|
||||||
#define DEXP2P_PUBKEYS ((char *)"subatomic")
|
#define DEXP2P_PUBKEYS ((char *)"hushdex")
|
||||||
#include "dappinc.h"
|
#include "dappinc.h"
|
||||||
|
|
||||||
// for OTC mode, the following 4 functions are the only ones that should be needed to support a new "coin"
|
// for OTC mode, the following 4 functions are the only ones that should be needed to support a new "coin"
|
||||||
//int64_t subatomic_getbalance(char *coin);
|
//int64_t hushdex_getbalance(char *coin);
|
||||||
//bits256 subatomic_coinpayment(int32_t OTCmode,char *coin,char *destaddr,uint64_t paytoshis,char *memostr);
|
//bits256 hushdex_coinpayment(int32_t OTCmode,char *coin,char *destaddr,uint64_t paytoshis,char *memostr);
|
||||||
//cJSON *subatomic_txidwait(char *coin,bits256 txid,char *hexstr,int32_t numseconds);
|
//cJSON *hushdex_txidwait(char *coin,bits256 txid,char *hexstr,int32_t numseconds);
|
||||||
//int64_t subatomic_verifypayment(char *coin,cJSON *rawtx,uint64_t destsatoshis,char *destaddr);
|
//int64_t hushdex_verifypayment(char *coin,cJSON *rawtx,uint64_t destsatoshis,char *destaddr);
|
||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
// address conversion
|
// address conversion
|
||||||
@@ -43,9 +44,7 @@
|
|||||||
#define SUBATOMIC_TIMEOUT 60
|
#define SUBATOMIC_TIMEOUT 60
|
||||||
#define SUBATOMIC_LOCKTIME 3600
|
#define SUBATOMIC_LOCKTIME 3600
|
||||||
#define SUBATOMIC_TXFEE 10000
|
#define SUBATOMIC_TXFEE 10000
|
||||||
|
|
||||||
#define SUBATOMIC_PRIORITY 5
|
#define SUBATOMIC_PRIORITY 5
|
||||||
|
|
||||||
#define SUBATOMIC_OPENREQUEST 1
|
#define SUBATOMIC_OPENREQUEST 1
|
||||||
#define SUBATOMIC_APPROVED 2
|
#define SUBATOMIC_APPROVED 2
|
||||||
#define SUBATOMIC_OPENED 3
|
#define SUBATOMIC_OPENED 3
|
||||||
@@ -80,12 +79,12 @@ struct msginfo
|
|||||||
struct abinfo alice,bob;
|
struct abinfo alice,bob;
|
||||||
} *Messages;
|
} *Messages;
|
||||||
|
|
||||||
uint64_t subatomic_txfee(char *coin)
|
uint64_t hushdex_txfee(char *coin)
|
||||||
{
|
{
|
||||||
return(SUBATOMIC_TXFEE);
|
return(SUBATOMIC_TXFEE);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *subatomic_checkname(char *tmpstr,struct msginfo *mp,int32_t baserel,char *coin)
|
char *hushdex_checkname(char *tmpstr,struct msginfo *mp,int32_t baserel,char *coin)
|
||||||
{
|
{
|
||||||
int32_t i,n; cJSON *external,*item; char *coinstr,*clistr; struct coininfo *ptr;
|
int32_t i,n; cJSON *external,*item; char *coinstr,*clistr; struct coininfo *ptr;
|
||||||
ptr = (baserel == 0) ? &mp->base : &mp->rel;
|
ptr = (baserel == 0) ? &mp->base : &mp->rel;
|
||||||
@@ -130,16 +129,9 @@ char *subatomic_checkname(char *tmpstr,struct msginfo *mp,int32_t baserel,char *
|
|||||||
}
|
}
|
||||||
if ( ptr->isexternal == 0 )
|
if ( ptr->isexternal == 0 )
|
||||||
{
|
{
|
||||||
if ( strcmp(coin,"KMD") != 0 )
|
|
||||||
{
|
|
||||||
strcpy(ptr->acname,coin);
|
strcpy(ptr->acname,coin);
|
||||||
strcpy(ptr->coinstr,"");
|
strcpy(ptr->coinstr,"");
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strcpy(ptr->coinstr,coin);
|
|
||||||
strcpy(ptr->acname,"");
|
strcpy(ptr->acname,"");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -153,27 +145,26 @@ char *subatomic_checkname(char *tmpstr,struct msginfo *mp,int32_t baserel,char *
|
|||||||
for (i=1; coin[i]!=0; i++)
|
for (i=1; coin[i]!=0; i++)
|
||||||
if ( isupper(coin[i]) == 0 )
|
if ( isupper(coin[i]) == 0 )
|
||||||
return(coin);
|
return(coin);
|
||||||
if ( strcmp(coin+1,"KMD") != 0 )
|
|
||||||
ptr->iszaddr = 1;
|
ptr->iszaddr = 1;
|
||||||
return(coin+1);
|
return(coin+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_zonly(struct coininfo *coin)
|
int32_t hushdex_zonly(struct coininfo *coin)
|
||||||
{
|
{
|
||||||
if ( strcmp(coin->coin,"PIRATE") == 0 )
|
if ( strcmp(coin->coin,"PIRATE") == 0 )
|
||||||
return(1);
|
return(1);
|
||||||
else return(coin->iszaddr);
|
else return(coin->iszaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// //////////////////////////////// the four key functions needed to support a new item for subatomics
|
// //////////////////////////////// the four key functions needed to support a new item for hushdexs
|
||||||
|
|
||||||
int64_t _subatomic_getbalance(struct coininfo *coin)
|
int64_t _hushdex_getbalance(struct coininfo *coin)
|
||||||
{
|
{
|
||||||
cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0;
|
cJSON *retjson; char *retstr,cmpstr[64]; int64_t amount=0;
|
||||||
if ( (retjson= subatomic_cli(coin->cli,&retstr,"getbalance","","","","","","","")) != 0 )
|
if ( (retjson= hushdex_cli(coin->cli,&retstr,"getbalance","","","","","","","")) != 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"_subatomic_getbalance.(%s) %s returned json!\n",coin->coinstr,coin->cli);
|
fprintf(stderr,"_hushdex_getbalance.(%s) %s returned json!\n",coin->coinstr,coin->cli);
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
else if ( retstr != 0 )
|
else if ( retstr != 0 )
|
||||||
@@ -188,14 +179,14 @@ int64_t _subatomic_getbalance(struct coininfo *coin)
|
|||||||
return (amount);
|
return (amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
bits256 _subatomic_sendtoaddress(struct coininfo *coin,char *destaddr,int64_t satoshis)
|
bits256 _hushdex_sendtoaddress(struct coininfo *coin,char *destaddr,int64_t satoshis)
|
||||||
{
|
{
|
||||||
char numstr[32],*retstr,str[65]; cJSON *retjson; bits256 txid;
|
char numstr[32],*retstr,str[65]; cJSON *retjson; bits256 txid;
|
||||||
memset(txid.bytes,0,sizeof(txid));
|
memset(txid.bytes,0,sizeof(txid));
|
||||||
sprintf(numstr,"%.8f",(double)satoshis/SATOSHIDEN);
|
sprintf(numstr,"%.8f",(double)satoshis/SATOSHIDEN);
|
||||||
if ( (retjson= subatomic_cli(coin->cli,&retstr,"sendtoaddress",destaddr,numstr,"false","","","","")) != 0 )
|
if ( (retjson= hushdex_cli(coin->cli,&retstr,"sendtoaddress",destaddr,numstr,"false","","","","")) != 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"unexpected _subatomic_sendtoaddress json.(%s)\n",jprint(retjson,0));
|
fprintf(stderr,"unexpected _hushdex_sendtoaddress json.(%s)\n",jprint(retjson,0));
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
else if ( retstr != 0 )
|
else if ( retstr != 0 )
|
||||||
@@ -205,35 +196,31 @@ bits256 _subatomic_sendtoaddress(struct coininfo *coin,char *destaddr,int64_t sa
|
|||||||
retstr[64] = 0;
|
retstr[64] = 0;
|
||||||
decode_hex(txid.bytes,32,retstr);
|
decode_hex(txid.bytes,32,retstr);
|
||||||
}
|
}
|
||||||
fprintf(stderr,"_subatomic_sendtoaddress %s %.8f txid.(%s)\n",destaddr,(double)satoshis/SATOSHIDEN,bits256_str(str,txid));
|
fprintf(stderr,"_hushdex_sendtoaddress %s %.8f txid.(%s)\n",destaddr,(double)satoshis/SATOSHIDEN,bits256_str(str,txid));
|
||||||
free(retstr);
|
free(retstr);
|
||||||
}
|
}
|
||||||
return(txid);
|
return(txid);
|
||||||
}
|
}
|
||||||
|
|
||||||
cJSON *_subatomic_rawtransaction(struct coininfo *coin,bits256 txid)
|
cJSON *_hushdex_rawtransaction(struct coininfo *coin,bits256 txid)
|
||||||
{
|
{
|
||||||
cJSON *retjson; char *retstr,str[65];
|
cJSON *retjson; char *retstr,str[65];
|
||||||
if ( (retjson= subatomic_cli(coin->cli,&retstr,"getrawtransaction",bits256_str(str,txid),"1","","","","","")) != 0 )
|
if ( (retjson= hushdex_cli(coin->cli,&retstr,"getrawtransaction",bits256_str(str,txid),"1","","","","","")) != 0 )
|
||||||
{
|
{
|
||||||
return(retjson);
|
return(retjson);
|
||||||
}
|
}
|
||||||
else if ( retstr != 0 )
|
else if ( retstr != 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"_subatomic_rawtransaction.(%s) %s error.(%s)\n",coin->coin,coin->name,retstr);
|
fprintf(stderr,"_hushdex_rawtransaction.(%s) %s error.(%s)\n",coin->coin,coin->name,retstr);
|
||||||
free(retstr);
|
free(retstr);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t subatomic_getbalance(struct coininfo *coin)
|
int64_t hushdex_getbalance(struct coininfo *coin)
|
||||||
{
|
{
|
||||||
char *coinstr,*acname=""; FILE *fp; int64_t retval = 0;
|
char *coinstr,*acname=""; FILE *fp; int64_t retval = 0;
|
||||||
if ( strcmp(coin->coin,"KMD") != 0 )
|
coinstr = coin->coin;
|
||||||
{
|
|
||||||
acname = coin->coin;
|
|
||||||
coinstr = "";
|
|
||||||
} else coinstr = coin->coin;
|
|
||||||
if ( coin->isfile != 0 )
|
if ( coin->isfile != 0 )
|
||||||
{
|
{
|
||||||
if ( (fp= fopen(coin->name+1,"rb")) != 0 ) // if alice, add bob pubkey to fname
|
if ( (fp= fopen(coin->name+1,"rb")) != 0 ) // if alice, add bob pubkey to fname
|
||||||
@@ -243,7 +230,7 @@ int64_t subatomic_getbalance(struct coininfo *coin)
|
|||||||
}
|
}
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
else if ( subatomic_zonly(coin) != 0 )
|
else if ( hushdex_zonly(coin) != 0 )
|
||||||
return(z_getbalance(coinstr,acname,DPOW_recvZaddr));
|
return(z_getbalance(coinstr,acname,DPOW_recvZaddr));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -259,11 +246,11 @@ int64_t subatomic_getbalance(struct coininfo *coin)
|
|||||||
}
|
}
|
||||||
else if ( coin->isexternal == 0 )
|
else if ( coin->isexternal == 0 )
|
||||||
return(get_getbalance(coinstr,acname));
|
return(get_getbalance(coinstr,acname));
|
||||||
else return(_subatomic_getbalance(coin));
|
else return(_hushdex_getbalance(coin));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bits256 subatomic_coinpayment(uint32_t origid,int32_t OTCmode,struct coininfo *coin,char *destaddr,uint64_t paytoshis,char *memostr,char *destpub,char *senderpub)
|
bits256 hushdex_coinpayment(uint32_t origid,int32_t OTCmode,struct coininfo *coin,char *destaddr,uint64_t paytoshis,char *memostr,char *destpub,char *senderpub)
|
||||||
{
|
{
|
||||||
bits256 txid; char opidstr[128],opretstr[32],str[65],*status,*coinstr,*acname=""; cJSON *retjson,*retjson2,*item,*res; int32_t i,pending=0;
|
bits256 txid; char opidstr[128],opretstr[32],str[65],*status,*coinstr,*acname=""; cJSON *retjson,*retjson2,*item,*res; int32_t i,pending=0;
|
||||||
memset(&txid,0,sizeof(txid));
|
memset(&txid,0,sizeof(txid));
|
||||||
@@ -288,7 +275,7 @@ bits256 subatomic_coinpayment(uint32_t origid,int32_t OTCmode,struct coininfo *c
|
|||||||
fprintf(stderr,"end broadcast of (%s) to %s\n",coin->coin+1,senderpub);
|
fprintf(stderr,"end broadcast of (%s) to %s\n",coin->coin+1,senderpub);
|
||||||
return(txid);
|
return(txid);
|
||||||
}
|
}
|
||||||
else if ( subatomic_zonly(coin) != 0 )
|
else if ( hushdex_zonly(coin) != 0 )
|
||||||
{
|
{
|
||||||
if ( memostr[0] == 0 )
|
if ( memostr[0] == 0 )
|
||||||
memostr = "beef";
|
memostr = "beef";
|
||||||
@@ -327,24 +314,20 @@ bits256 subatomic_coinpayment(uint32_t origid,int32_t OTCmode,struct coininfo *c
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( strcmp(coin->coin,"KMD") != 0 )
|
coinstr = coin->coin;
|
||||||
{
|
|
||||||
acname = coin->coin;
|
|
||||||
coinstr = "";
|
|
||||||
} else coinstr = coin->coin;
|
|
||||||
if ( coin->istoken != 0 )
|
if ( coin->istoken != 0 )
|
||||||
txid = tokentransfer(coinstr,acname,coin->tokenid,destpub,paytoshis/SATOSHIDEN);
|
txid = tokentransfer(coinstr,acname,coin->tokenid,destpub,paytoshis/SATOSHIDEN);
|
||||||
else if ( coin->isexternal == 0 )
|
else if ( coin->isexternal == 0 )
|
||||||
{
|
{
|
||||||
sprintf(opretstr,"%08x",origid);
|
sprintf(opretstr,"%08x",origid);
|
||||||
txid = sendtoaddress(coinstr,acname,destaddr,paytoshis,opretstr);
|
txid = sendtoaddress(coinstr,acname,destaddr,paytoshis,opretstr);
|
||||||
} else txid = _subatomic_sendtoaddress(coin,destaddr,paytoshis);
|
} else txid = _hushdex_sendtoaddress(coin,destaddr,paytoshis);
|
||||||
printf("%u got txid.%s\n",origid,bits256_str(str,txid));
|
printf("%u got txid.%s\n",origid,bits256_str(str,txid));
|
||||||
}
|
}
|
||||||
return(txid);
|
return(txid);
|
||||||
}
|
}
|
||||||
|
|
||||||
cJSON *subatomic_txidwait(struct coininfo *coin,bits256 txid,char *hexstr,int32_t numseconds,char *senderpub)
|
cJSON *hushdex_txidwait(struct coininfo *coin,bits256 txid,char *hexstr,int32_t numseconds,char *senderpub)
|
||||||
{
|
{
|
||||||
int32_t i,zflag; char *coinstr,str[65],*acname=""; cJSON *rawtx; bits256 z; bits256 filehash;
|
int32_t i,zflag; char *coinstr,str[65],*acname=""; cJSON *rawtx; bits256 z; bits256 filehash;
|
||||||
memset(&z,0,sizeof(z));
|
memset(&z,0,sizeof(z));
|
||||||
@@ -355,12 +338,8 @@ cJSON *subatomic_txidwait(struct coininfo *coin,bits256 txid,char *hexstr,int32_
|
|||||||
// compare against txid
|
// compare against txid
|
||||||
// if matches, sendrawtransaction if OTC mode, decoode and return if channels mode
|
// if matches, sendrawtransaction if OTC mode, decoode and return if channels mode
|
||||||
}
|
}
|
||||||
zflag = (subatomic_zonly(coin) != 0);
|
zflag = (hushdex_zonly(coin) != 0);
|
||||||
if ( strcmp(coin->coin,"KMD") != 0 )
|
coinstr = coin->coin;
|
||||||
{
|
|
||||||
acname = coin->coin;
|
|
||||||
coinstr = "";
|
|
||||||
} else coinstr = coin->coin;
|
|
||||||
for (i=0; i<numseconds; i++)
|
for (i=0; i<numseconds; i++)
|
||||||
{
|
{
|
||||||
if ( coin->isfile != 0 )
|
if ( coin->isfile != 0 )
|
||||||
@@ -380,7 +359,7 @@ cJSON *subatomic_txidwait(struct coininfo *coin,bits256 txid,char *hexstr,int32_
|
|||||||
rawtx = get_z_viewtransaction(coinstr,acname,txid);
|
rawtx = get_z_viewtransaction(coinstr,acname,txid);
|
||||||
else if ( coin->isexternal == 0 )
|
else if ( coin->isexternal == 0 )
|
||||||
rawtx = get_rawtransaction(coinstr,acname,txid);
|
rawtx = get_rawtransaction(coinstr,acname,txid);
|
||||||
else rawtx = _subatomic_rawtransaction(coin,txid);
|
else rawtx = _hushdex_rawtransaction(coin,txid);
|
||||||
if ( rawtx != 0 )
|
if ( rawtx != 0 )
|
||||||
return(rawtx);
|
return(rawtx);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
@@ -389,7 +368,7 @@ cJSON *subatomic_txidwait(struct coininfo *coin,bits256 txid,char *hexstr,int32_
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t subatomic_verifypayment(struct coininfo *coin,cJSON *rawtx,uint64_t destsatoshis,char *destaddr,bits256 txid)
|
int64_t hushdex_verifypayment(struct coininfo *coin,cJSON *rawtx,uint64_t destsatoshis,char *destaddr,bits256 txid)
|
||||||
{
|
{
|
||||||
int32_t i,n,m,valid=0; bits256 tokenid,filehash,checkhash; cJSON *array,*item,*sobj,*a; char *addr,*acname,*coinstr,tokenaddr[64],*hex; uint8_t hexbuf[512],pub33[33]; uint64_t netval,recvsatoshis = 0;
|
int32_t i,n,m,valid=0; bits256 tokenid,filehash,checkhash; cJSON *array,*item,*sobj,*a; char *addr,*acname,*coinstr,tokenaddr[64],*hex; uint8_t hexbuf[512],pub33[33]; uint64_t netval,recvsatoshis = 0;
|
||||||
if ( coin->isfile != 0 )
|
if ( coin->isfile != 0 )
|
||||||
@@ -402,7 +381,7 @@ int64_t subatomic_verifypayment(struct coininfo *coin,cJSON *rawtx,uint64_t dest
|
|||||||
return(SATOSHIDEN);
|
return(SATOSHIDEN);
|
||||||
} else return(0);
|
} else return(0);
|
||||||
}
|
}
|
||||||
else if ( subatomic_zonly(coin) != 0 )
|
else if ( hushdex_zonly(coin) != 0 )
|
||||||
{
|
{
|
||||||
if ( (array= jarray(&n,rawtx,"outputs")) != 0 && n > 0 )
|
if ( (array= jarray(&n,rawtx,"outputs")) != 0 && n > 0 )
|
||||||
{
|
{
|
||||||
@@ -421,11 +400,7 @@ int64_t subatomic_verifypayment(struct coininfo *coin,cJSON *rawtx,uint64_t dest
|
|||||||
item = jitem(array,0);
|
item = jitem(array,0);
|
||||||
if ( (sobj= jobj(item,"scriptPubKey")) != 0 && (a= jarray(&m,sobj,"addresses")) != 0 && m == 1 )
|
if ( (sobj= jobj(item,"scriptPubKey")) != 0 && (a= jarray(&m,sobj,"addresses")) != 0 && m == 1 )
|
||||||
{
|
{
|
||||||
if ( strcmp(coin->coin,"KMD") != 0 )
|
coinstr = coin->coin;
|
||||||
{
|
|
||||||
acname = coin->coin;
|
|
||||||
coinstr = "";
|
|
||||||
} else coinstr = coin->coin;
|
|
||||||
if ( get_tokenaddress(coinstr,acname,tokenaddr) != 0 )
|
if ( get_tokenaddress(coinstr,acname,tokenaddr) != 0 )
|
||||||
{
|
{
|
||||||
//fprintf(stderr,"tokenaddr.%s\n",tokenaddr);
|
//fprintf(stderr,"tokenaddr.%s\n",tokenaddr);
|
||||||
@@ -473,14 +448,14 @@ int64_t subatomic_verifypayment(struct coininfo *coin,cJSON *rawtx,uint64_t dest
|
|||||||
}
|
}
|
||||||
// //////////// end
|
// //////////// end
|
||||||
|
|
||||||
struct msginfo *subatomic_find(uint32_t origid)
|
struct msginfo *hushdex_find(uint32_t origid)
|
||||||
{
|
{
|
||||||
struct msginfo *mp;
|
struct msginfo *mp;
|
||||||
HASH_FIND(hh,Messages,&origid,sizeof(origid),mp);
|
HASH_FIND(hh,Messages,&origid,sizeof(origid),mp);
|
||||||
return(mp);
|
return(mp);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct msginfo *subatomic_add(uint32_t origid)
|
struct msginfo *hushdex_add(uint32_t origid)
|
||||||
{
|
{
|
||||||
struct msginfo *mp = calloc(1,sizeof(*mp));
|
struct msginfo *mp = calloc(1,sizeof(*mp));
|
||||||
mp->origid = origid;
|
mp->origid = origid;
|
||||||
@@ -488,7 +463,7 @@ struct msginfo *subatomic_add(uint32_t origid)
|
|||||||
return(mp);
|
return(mp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_status(struct msginfo *mp,int32_t status)
|
int32_t hushdex_status(struct msginfo *mp,int32_t status)
|
||||||
{
|
{
|
||||||
static FILE *fp;
|
static FILE *fp;
|
||||||
if ( fp == 0 )
|
if ( fp == 0 )
|
||||||
@@ -526,9 +501,9 @@ int32_t subatomic_status(struct msginfo *mp,int32_t status)
|
|||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
//fprintf(stderr,"%u <- %d\n",oid,s);
|
//fprintf(stderr,"%u <- %d\n",oid,s);
|
||||||
if ( (m= subatomic_find(oid)) == 0 )
|
if ( (m= hushdex_find(oid)) == 0 )
|
||||||
{
|
{
|
||||||
m = subatomic_add(oid);
|
m = hushdex_add(oid);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if ( s > m->status )
|
if ( s > m->status )
|
||||||
@@ -549,18 +524,18 @@ int32_t subatomic_status(struct msginfo *mp,int32_t status)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct msginfo *subatomic_tracker(uint32_t origid)
|
struct msginfo *hushdex_tracker(uint32_t origid)
|
||||||
{
|
{
|
||||||
struct msginfo *mp;
|
struct msginfo *mp;
|
||||||
if ( (mp= subatomic_find(origid)) == 0 )
|
if ( (mp= hushdex_find(origid)) == 0 )
|
||||||
{
|
{
|
||||||
mp = subatomic_add(origid);
|
mp = hushdex_add(origid);
|
||||||
subatomic_status(mp,0);
|
hushdex_status(mp,0);
|
||||||
}
|
}
|
||||||
return(mp);
|
return(mp);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *subatomic_hexstr(char *jsonstr)
|
char *hushdex_hexstr(char *jsonstr)
|
||||||
{
|
{
|
||||||
char *hexstr; int32_t i,c,n = (int32_t)strlen(jsonstr);
|
char *hexstr; int32_t i,c,n = (int32_t)strlen(jsonstr);
|
||||||
hexstr = malloc(2*n + 3);
|
hexstr = malloc(2*n + 3);
|
||||||
@@ -577,7 +552,7 @@ char *subatomic_hexstr(char *jsonstr)
|
|||||||
return(hexstr);
|
return(hexstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
cJSON *subatomic_mpjson(struct msginfo *mp)
|
cJSON *hushdex_mpjson(struct msginfo *mp)
|
||||||
{
|
{
|
||||||
cJSON *item;
|
cJSON *item;
|
||||||
item = cJSON_CreateObject();
|
item = cJSON_CreateObject();
|
||||||
@@ -598,12 +573,12 @@ cJSON *subatomic_mpjson(struct msginfo *mp)
|
|||||||
jaddstr(item,"alicesecp",mp->alice.secp);
|
jaddstr(item,"alicesecp",mp->alice.secp);
|
||||||
jaddstr(item,"bob",mp->bob.pubkey);
|
jaddstr(item,"bob",mp->bob.pubkey);
|
||||||
jaddstr(item,"bobsecp",mp->bob.secp);
|
jaddstr(item,"bobsecp",mp->bob.secp);
|
||||||
if ( subatomic_zonly(&mp->rel) != 0 )
|
if ( hushdex_zonly(&mp->rel) != 0 )
|
||||||
jaddstr(item,"bobZaddr",mp->bob.recvZaddr);
|
jaddstr(item,"bobZaddr",mp->bob.recvZaddr);
|
||||||
else jaddstr(item,"bobaddr",mp->bob.recvaddr);
|
else jaddstr(item,"bobaddr",mp->bob.recvaddr);
|
||||||
if ( mp->rel.istoken != 0 )
|
if ( mp->rel.istoken != 0 )
|
||||||
jaddstr(item,"bobtoken",mp->rel.tokenid);
|
jaddstr(item,"bobtoken",mp->rel.tokenid);
|
||||||
if ( subatomic_zonly(&mp->base) != 0 )
|
if ( hushdex_zonly(&mp->base) != 0 )
|
||||||
jaddstr(item,"aliceZaddr",mp->alice.recvZaddr);
|
jaddstr(item,"aliceZaddr",mp->alice.recvZaddr);
|
||||||
else jaddstr(item,"aliceaddr",mp->alice.recvaddr);
|
else jaddstr(item,"aliceaddr",mp->alice.recvaddr);
|
||||||
if ( mp->base.istoken != 0 )
|
if ( mp->base.istoken != 0 )
|
||||||
@@ -611,19 +586,19 @@ cJSON *subatomic_mpjson(struct msginfo *mp)
|
|||||||
return(item);
|
return(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t subatomic_orderbook_mpset(struct msginfo *mp,char *basecheck)
|
uint64_t hushdex_orderbook_mpset(struct msginfo *mp,char *basecheck)
|
||||||
{
|
{
|
||||||
cJSON *retjson; char *tagA,*tagB,*senderpub,*str,tmpstr[32]; int32_t matches=0; double volA,volB; int64_t txfee=0;
|
cJSON *retjson; char *tagA,*tagB,*senderpub,*str,tmpstr[32]; int32_t matches=0; double volA,volB; int64_t txfee=0;
|
||||||
strcpy(mp->base.name,basecheck);
|
strcpy(mp->base.name,basecheck);
|
||||||
strcpy(mp->base.coin,subatomic_checkname(tmpstr,mp,0,basecheck));
|
strcpy(mp->base.coin,hushdex_checkname(tmpstr,mp,0,basecheck));
|
||||||
mp->rel.txfee = subatomic_txfee(mp->rel.coin);
|
mp->rel.txfee = hushdex_txfee(mp->rel.coin);
|
||||||
if ( (retjson= dpow_get(mp->origid)) != 0 )
|
if ( (retjson= dpow_get(mp->origid)) != 0 )
|
||||||
{
|
{
|
||||||
//fprintf(stderr,"dpow_get.(%s) (%s/%s)\n",jprint(retjson,0),mp->base.coin,mp->rel.coin);
|
//fprintf(stderr,"dpow_get.(%s) (%s/%s)\n",jprint(retjson,0),mp->base.coin,mp->rel.coin);
|
||||||
if ( (senderpub= jstr(retjson,"senderpub")) != 0 && is_hexstr(senderpub,0) == 66 && (tagA= jstr(retjson,"tagA")) != 0 && (tagB= jstr(retjson,"tagB")) != 0 && strncmp(tagB,mp->rel.name,strlen(mp->rel.name)) == 0 && strlen(tagA) < sizeof(mp->base.name) )
|
if ( (senderpub= jstr(retjson,"senderpub")) != 0 && is_hexstr(senderpub,0) == 66 && (tagA= jstr(retjson,"tagA")) != 0 && (tagB= jstr(retjson,"tagB")) != 0 && strncmp(tagB,mp->rel.name,strlen(mp->rel.name)) == 0 && strlen(tagA) < sizeof(mp->base.name) )
|
||||||
{
|
{
|
||||||
strcpy(mp->base.name,tagA);
|
strcpy(mp->base.name,tagA);
|
||||||
strcpy(mp->base.coin,subatomic_checkname(tmpstr,mp,0,tagA));
|
strcpy(mp->base.coin,hushdex_checkname(tmpstr,mp,0,tagA));
|
||||||
if ( basecheck[0] == 0 || strncmp(basecheck,tagA,strlen(basecheck)) == 0 )
|
if ( basecheck[0] == 0 || strncmp(basecheck,tagA,strlen(basecheck)) == 0 )
|
||||||
matches = 1;
|
matches = 1;
|
||||||
else if ( strcmp(tagA,mp->base.name) == 0 )
|
else if ( strcmp(tagA,mp->base.name) == 0 )
|
||||||
@@ -635,7 +610,7 @@ uint64_t subatomic_orderbook_mpset(struct msginfo *mp,char *basecheck)
|
|||||||
if ( (str= jstr(retjson,"decrypted")) != 0 && strlen(str) < 128 )
|
if ( (str= jstr(retjson,"decrypted")) != 0 && strlen(str) < 128 )
|
||||||
strcpy(mp->payload,str);
|
strcpy(mp->payload,str);
|
||||||
mp->locktime = juint(retjson,"timestamp") + SUBATOMIC_LOCKTIME;
|
mp->locktime = juint(retjson,"timestamp") + SUBATOMIC_LOCKTIME;
|
||||||
mp->base.txfee = subatomic_txfee(mp->base.coin);
|
mp->base.txfee = hushdex_txfee(mp->base.coin);
|
||||||
strcpy(mp->senderpub,senderpub);
|
strcpy(mp->senderpub,senderpub);
|
||||||
volB = jdouble(retjson,"amountB");
|
volB = jdouble(retjson,"amountB");
|
||||||
volA = jdouble(retjson,"amountA");
|
volA = jdouble(retjson,"amountA");
|
||||||
@@ -665,7 +640,7 @@ char *randhashstr(char *str)
|
|||||||
return(str);
|
return(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void subatomic_extrafields(cJSON *dest,cJSON *src)
|
void hushdex_extrafields(cJSON *dest,cJSON *src)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
if ( (str= jstr(src,"approval")) != 0 )
|
if ( (str= jstr(src,"approval")) != 0 )
|
||||||
@@ -694,12 +669,12 @@ void subatomic_extrafields(cJSON *dest,cJSON *src)
|
|||||||
jaddstr(dest,"bobtoken",str);
|
jaddstr(dest,"bobtoken",str);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *subatomic_submit(cJSON *argjson,int32_t tobob)
|
char *hushdex_submit(cJSON *argjson,int32_t tobob)
|
||||||
{
|
{
|
||||||
char *jsonstr,*hexstr;
|
char *jsonstr,*hexstr;
|
||||||
jaddnum(argjson,"tobob",tobob != 0);
|
jaddnum(argjson,"tobob",tobob != 0);
|
||||||
jsonstr = jprint(argjson,1);
|
jsonstr = jprint(argjson,1);
|
||||||
hexstr = subatomic_hexstr(jsonstr);
|
hexstr = hushdex_hexstr(jsonstr);
|
||||||
free(jsonstr);
|
free(jsonstr);
|
||||||
return(hexstr);
|
return(hexstr);
|
||||||
}
|
}
|
||||||
@@ -720,7 +695,7 @@ char *subatomic_submit(cJSON *argjson,int32_t tobob)
|
|||||||
#define SCRIPT_OP_CHECKMULTISIGVERIFY 0xaf
|
#define SCRIPT_OP_CHECKMULTISIGVERIFY 0xaf
|
||||||
#define SCRIPT_OP_CHECKLOCKTIMEVERIFY 0xb1
|
#define SCRIPT_OP_CHECKLOCKTIMEVERIFY 0xb1
|
||||||
|
|
||||||
int32_t subatomic_redeemscript(char *redeemscript,uint32_t locktime,char *pubkeyA,char *pubkeyB) // not needed
|
int32_t hushdex_redeemscript(char *redeemscript,uint32_t locktime,char *pubkeyA,char *pubkeyB) // not needed
|
||||||
{
|
{
|
||||||
// if ( refund ) OP_HASH160 <2of2 multisig hash> OP_EQUAL // standard multisig
|
// if ( refund ) OP_HASH160 <2of2 multisig hash> OP_EQUAL // standard multisig
|
||||||
// else <locktime> CLTV OP_DROP <pubkeyA> OP_CHECKSIG // standard spend
|
// else <locktime> CLTV OP_DROP <pubkeyA> OP_CHECKSIG // standard spend
|
||||||
@@ -768,21 +743,16 @@ int32_t subatomic_redeemscript(char *redeemscript,uint32_t locktime,char *pubkey
|
|||||||
return(n);
|
return(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_approved(struct msginfo *mp,cJSON *approval,cJSON *msgjson,char *senderpub)
|
int32_t hushdex_approved(struct msginfo *mp,cJSON *approval,cJSON *msgjson,char *senderpub)
|
||||||
{
|
{
|
||||||
char *hexstr,numstr[32],redeemscript[1024],*coin,*acname=""; cJSON *retjson,*decodejson; int32_t i,retval = 0;
|
char *hexstr,numstr[32],redeemscript[1024],*coin,*acname=""; cJSON *retjson,*decodejson; int32_t i,retval = 0;
|
||||||
subatomic_extrafields(approval,msgjson);
|
hushdex_extrafields(approval,msgjson);
|
||||||
if ( mp->OTCmode == 0 )
|
if ( mp->OTCmode == 0 )
|
||||||
{
|
{
|
||||||
coin = (mp->bobflag != 0) ? mp->base.coin : mp->rel.coin; // the other side gets this coin
|
coin = (mp->bobflag != 0) ? mp->base.coin : mp->rel.coin; // the other side gets this coin
|
||||||
if ( strcmp(coin,"KMD") != 0 )
|
|
||||||
{
|
|
||||||
acname = coin;
|
|
||||||
coin = "";
|
|
||||||
}
|
|
||||||
if ( get_createmultisig2(coin,acname,mp->msigaddr,mp->redeemscript,mp->alice.secp,mp->bob.secp) != 0 )
|
if ( get_createmultisig2(coin,acname,mp->msigaddr,mp->redeemscript,mp->alice.secp,mp->bob.secp) != 0 )
|
||||||
{
|
{
|
||||||
subatomic_redeemscript(redeemscript,mp->locktime,mp->alice.secp,mp->bob.secp);
|
hushdex_redeemscript(redeemscript,mp->locktime,mp->alice.secp,mp->bob.secp);
|
||||||
if ( (decodejson= get_decodescript(coin,acname,redeemscript)) != 0 )
|
if ( (decodejson= get_decodescript(coin,acname,redeemscript)) != 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s %s msigaddr.%s %s -> %s %s\n",mp->bobflag!=0?"bob":"alice",(mp->bobflag != 0) ? mp->base.coin : mp->rel.coin,mp->msigaddr,mp->redeemscript,redeemscript,jprint(decodejson,0));
|
fprintf(stderr,"%s %s msigaddr.%s %s -> %s %s\n",mp->bobflag!=0?"bob":"alice",(mp->bobflag != 0) ? mp->base.coin : mp->rel.coin,mp->msigaddr,mp->redeemscript,redeemscript,jprint(decodejson,0));
|
||||||
@@ -797,51 +767,51 @@ int32_t subatomic_approved(struct msginfo *mp,cJSON *approval,cJSON *msgjson,cha
|
|||||||
i++;
|
i++;
|
||||||
mp->approval[i<<1] = 0;
|
mp->approval[i<<1] = 0;
|
||||||
jaddstr(approval,"approval",mp->approval);
|
jaddstr(approval,"approval",mp->approval);
|
||||||
hexstr = subatomic_submit(approval,!mp->bobflag);
|
hexstr = hushdex_submit(approval,!mp->bobflag);
|
||||||
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"approved",senderpub,"","")) != 0 )
|
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"approved",senderpub,"","")) != 0 )
|
||||||
{
|
{
|
||||||
if ( (mp->approvalid= juint(retjson,"id")) != 0 )
|
if ( (mp->approvalid= juint(retjson,"id")) != 0 )
|
||||||
retval = 1;
|
retval = 1;
|
||||||
printf("%u approvalid.%u (%s)\n",mp->origid,mp->approvalid,senderpub);
|
printf("%u approvalid.%u (%s)\n",mp->origid,mp->approvalid,senderpub);
|
||||||
subatomic_status(mp,SUBATOMIC_APPROVED);
|
hushdex_status(mp,SUBATOMIC_APPROVED);
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
free(hexstr);
|
free(hexstr);
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_opened(struct msginfo *mp,cJSON *opened,cJSON *msgjson,char *senderpub)
|
int32_t hushdex_opened(struct msginfo *mp,cJSON *opened,cJSON *msgjson,char *senderpub)
|
||||||
{
|
{
|
||||||
char *hexstr,channelstr[65]; cJSON *retjson; int32_t retval = 0;
|
char *hexstr,channelstr[65]; cJSON *retjson; int32_t retval = 0;
|
||||||
subatomic_extrafields(opened,msgjson);
|
hushdex_extrafields(opened,msgjson);
|
||||||
jaddstr(opened,"opened",randhashstr(channelstr));
|
jaddstr(opened,"opened",randhashstr(channelstr));
|
||||||
hexstr = subatomic_submit(opened,!mp->bobflag);
|
hexstr = hushdex_submit(opened,!mp->bobflag);
|
||||||
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"opened",senderpub,"","")) != 0 )
|
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"opened",senderpub,"","")) != 0 )
|
||||||
{
|
{
|
||||||
if ( (mp->openedid= juint(retjson,"id")) != 0 )
|
if ( (mp->openedid= juint(retjson,"id")) != 0 )
|
||||||
retval = 1;
|
retval = 1;
|
||||||
printf("%u openedid.%u\n",mp->origid,mp->openedid);
|
printf("%u openedid.%u\n",mp->origid,mp->openedid);
|
||||||
subatomic_status(mp,SUBATOMIC_OPENED);
|
hushdex_status(mp,SUBATOMIC_OPENED);
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
free(hexstr);
|
free(hexstr);
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_payment(struct msginfo *mp,cJSON *payment,cJSON *msgjson,char *senderpub)
|
int32_t hushdex_payment(struct msginfo *mp,cJSON *payment,cJSON *msgjson,char *senderpub)
|
||||||
{
|
{
|
||||||
bits256 txid; uint64_t paytoshis; cJSON *retjson; char numstr[32],*coin,*dest,*hexstr; int32_t retval = 0;
|
bits256 txid; uint64_t paytoshis; cJSON *retjson; char numstr[32],*coin,*dest,*hexstr; int32_t retval = 0;
|
||||||
if ( mp->bobflag == 0 )
|
if ( mp->bobflag == 0 )
|
||||||
{
|
{
|
||||||
coin = mp->rel.name;
|
coin = mp->rel.name;
|
||||||
paytoshis = mp->rel.satoshis;
|
paytoshis = mp->rel.satoshis;
|
||||||
if ( subatomic_zonly(&mp->rel) != 0 )
|
if ( hushdex_zonly(&mp->rel) != 0 )
|
||||||
dest = mp->bob.recvZaddr;
|
dest = mp->bob.recvZaddr;
|
||||||
else dest = mp->bob.recvaddr;
|
else dest = mp->bob.recvaddr;
|
||||||
sprintf(numstr,"%llu",(long long)paytoshis);
|
sprintf(numstr,"%llu",(long long)paytoshis);
|
||||||
jaddstr(payment,"alicepays",numstr);
|
jaddstr(payment,"alicepays",numstr);
|
||||||
jaddstr(payment,"bobdestaddr",dest);
|
jaddstr(payment,"bobdestaddr",dest);
|
||||||
txid = subatomic_coinpayment(mp->origid,mp->OTCmode,&mp->rel,dest,paytoshis,mp->approval,mp->bob.secp,senderpub);
|
txid = hushdex_coinpayment(mp->origid,mp->OTCmode,&mp->rel,dest,paytoshis,mp->approval,mp->bob.secp,senderpub);
|
||||||
jaddbits256(payment,"alicepayment",txid);
|
jaddbits256(payment,"alicepayment",txid);
|
||||||
mp->alicepayment = txid;
|
mp->alicepayment = txid;
|
||||||
hexstr = 0; // get it from rawtransaction of txid
|
hexstr = 0; // get it from rawtransaction of txid
|
||||||
@@ -851,60 +821,60 @@ int32_t subatomic_payment(struct msginfo *mp,cJSON *payment,cJSON *msgjson,char
|
|||||||
{
|
{
|
||||||
coin = mp->base.name;
|
coin = mp->base.name;
|
||||||
paytoshis = mp->base.satoshis;
|
paytoshis = mp->base.satoshis;
|
||||||
if ( subatomic_zonly(&mp->base) != 0 )
|
if ( hushdex_zonly(&mp->base) != 0 )
|
||||||
dest = mp->alice.recvZaddr;
|
dest = mp->alice.recvZaddr;
|
||||||
else dest = mp->alice.recvaddr;
|
else dest = mp->alice.recvaddr;
|
||||||
sprintf(numstr,"%llu",(long long)paytoshis);
|
sprintf(numstr,"%llu",(long long)paytoshis);
|
||||||
jaddstr(payment,"bobpays",numstr);
|
jaddstr(payment,"bobpays",numstr);
|
||||||
jaddstr(payment,"alicedestaddr",dest);
|
jaddstr(payment,"alicedestaddr",dest);
|
||||||
txid = subatomic_coinpayment(mp->origid,mp->OTCmode,&mp->base,dest,paytoshis,mp->approval,mp->alice.secp,senderpub);
|
txid = hushdex_coinpayment(mp->origid,mp->OTCmode,&mp->base,dest,paytoshis,mp->approval,mp->alice.secp,senderpub);
|
||||||
jaddbits256(payment,"bobpayment",txid);
|
jaddbits256(payment,"bobpayment",txid);
|
||||||
mp->bobpayment = txid;
|
mp->bobpayment = txid;
|
||||||
hexstr = 0; // get it from rawtransaction of txid
|
hexstr = 0; // get it from rawtransaction of txid
|
||||||
jaddstr(payment,"bobtx",hexstr);
|
jaddstr(payment,"bobtx",hexstr);
|
||||||
}
|
}
|
||||||
hexstr = subatomic_submit(payment,!mp->bobflag);
|
hexstr = hushdex_submit(payment,!mp->bobflag);
|
||||||
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"payment",senderpub,"","")) != 0 )
|
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"payment",senderpub,"","")) != 0 )
|
||||||
{
|
{
|
||||||
if ( (mp->paymentids[0]= juint(retjson,"id")) != 0 )
|
if ( (mp->paymentids[0]= juint(retjson,"id")) != 0 )
|
||||||
retval = 1;
|
retval = 1;
|
||||||
printf("%u: %.8f %s -> %s, paymentid[0] %u\n",mp->origid,dstr(paytoshis),coin,dest,mp->paymentids[0]);
|
printf("%u: %.8f %s -> %s, paymentid[0] %u\n",mp->origid,dstr(paytoshis),coin,dest,mp->paymentids[0]);
|
||||||
subatomic_status(mp,SUBATOMIC_PAYMENT);
|
hushdex_status(mp,SUBATOMIC_PAYMENT);
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
free(hexstr);
|
free(hexstr);
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_paidinfull(struct msginfo *mp,cJSON *paid,cJSON *msgjson,char *senderpub)
|
int32_t hushdex_paidinfull(struct msginfo *mp,cJSON *paid,cJSON *msgjson,char *senderpub)
|
||||||
{
|
{
|
||||||
char *hexstr; cJSON *retjson; int32_t retval = 0;
|
char *hexstr; cJSON *retjson; int32_t retval = 0;
|
||||||
jaddstr(paid,"paid","in full");
|
jaddstr(paid,"paid","in full");
|
||||||
subatomic_extrafields(paid,msgjson);
|
hushdex_extrafields(paid,msgjson);
|
||||||
hexstr = subatomic_submit(paid,!mp->bobflag);
|
hexstr = hushdex_submit(paid,!mp->bobflag);
|
||||||
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"paid",senderpub,"","")) != 0 )
|
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"paid",senderpub,"","")) != 0 )
|
||||||
{
|
{
|
||||||
if ( (mp->paidid= juint(retjson,"id")) != 0 )
|
if ( (mp->paidid= juint(retjson,"id")) != 0 )
|
||||||
retval = 1;
|
retval = 1;
|
||||||
printf("%u paidid.%u\n",mp->origid,mp->paidid);
|
printf("%u paidid.%u\n",mp->origid,mp->paidid);
|
||||||
subatomic_status(mp,SUBATOMIC_PAIDINFULL);
|
hushdex_status(mp,SUBATOMIC_PAIDINFULL);
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
free(hexstr);
|
free(hexstr);
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_closed(struct msginfo *mp,cJSON *closed,cJSON *msgjson,char *senderpub)
|
int32_t hushdex_closed(struct msginfo *mp,cJSON *closed,cJSON *msgjson,char *senderpub)
|
||||||
{
|
{
|
||||||
char *hexstr; cJSON *retjson; int32_t retval = 0;
|
char *hexstr; cJSON *retjson; int32_t retval = 0;
|
||||||
jaddnum(closed,"closed",mp->origid);
|
jaddnum(closed,"closed",mp->origid);
|
||||||
subatomic_extrafields(closed,msgjson);
|
hushdex_extrafields(closed,msgjson);
|
||||||
hexstr = subatomic_submit(closed,!mp->bobflag);
|
hexstr = hushdex_submit(closed,!mp->bobflag);
|
||||||
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"closed",senderpub,"","")) != 0 )
|
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"closed",senderpub,"","")) != 0 )
|
||||||
{
|
{
|
||||||
if ( (mp->closedid= juint(retjson,"id")) != 0 )
|
if ( (mp->closedid= juint(retjson,"id")) != 0 )
|
||||||
retval = 1;
|
retval = 1;
|
||||||
subatomic_status(mp,SUBATOMIC_CLOSED);
|
hushdex_status(mp,SUBATOMIC_CLOSED);
|
||||||
printf("%u closedid.%u\n",mp->origid,mp->closedid);
|
printf("%u closedid.%u\n",mp->origid,mp->closedid);
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
@@ -912,25 +882,25 @@ int32_t subatomic_closed(struct msginfo *mp,cJSON *closed,cJSON *msgjson,char *s
|
|||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t subatomic_alice_openrequest(struct msginfo *origmp)
|
uint32_t hushdex_alice_openrequest(struct msginfo *origmp)
|
||||||
{
|
{
|
||||||
struct msginfo *mp; cJSON *retjson,*openrequest; char *hexstr,*str,tmpstr[32];
|
struct msginfo *mp; cJSON *retjson,*openrequest; char *hexstr,*str,tmpstr[32];
|
||||||
mp = subatomic_tracker(origmp->origid);
|
mp = hushdex_tracker(origmp->origid);
|
||||||
mp->origid = origmp->origid;
|
mp->origid = origmp->origid;
|
||||||
mp->rel.satoshis = origmp->rel.satoshis;
|
mp->rel.satoshis = origmp->rel.satoshis;
|
||||||
mp->rel.istoken = origmp->rel.istoken;
|
mp->rel.istoken = origmp->rel.istoken;
|
||||||
strcpy(mp->rel.tokenid,origmp->rel.tokenid);
|
strcpy(mp->rel.tokenid,origmp->rel.tokenid);
|
||||||
strcpy(mp->rel.name,origmp->rel.name);
|
strcpy(mp->rel.name,origmp->rel.name);
|
||||||
strcpy(mp->rel.coin,subatomic_checkname(tmpstr,mp,1,origmp->rel.name));
|
strcpy(mp->rel.coin,hushdex_checkname(tmpstr,mp,1,origmp->rel.name));
|
||||||
strcpy(mp->alice.pubkey,DPOW_pubkeystr);
|
strcpy(mp->alice.pubkey,DPOW_pubkeystr);
|
||||||
strcpy(mp->alice.secp,DPOW_secpkeystr);
|
strcpy(mp->alice.secp,DPOW_secpkeystr);
|
||||||
strcpy(mp->alice.recvZaddr,DPOW_recvZaddr);
|
strcpy(mp->alice.recvZaddr,DPOW_recvZaddr);
|
||||||
strcpy(mp->alice.recvaddr,DPOW_recvaddr);
|
strcpy(mp->alice.recvaddr,DPOW_recvaddr);
|
||||||
printf("rel.%s/%s %s openrequest %u status.%d (%s/%s)\n",mp->rel.name,mp->rel.coin,mp->rel.tokenid,mp->origid,mp->status,mp->alice.recvaddr,mp->alice.recvZaddr);
|
printf("rel.%s/%s %s openrequest %u status.%d (%s/%s)\n",mp->rel.name,mp->rel.coin,mp->rel.tokenid,mp->origid,mp->status,mp->alice.recvaddr,mp->alice.recvZaddr);
|
||||||
if ( mp->status == 0 && subatomic_orderbook_mpset(mp,"") != 0 )
|
if ( mp->status == 0 && hushdex_orderbook_mpset(mp,"") != 0 )
|
||||||
{
|
{
|
||||||
strcpy(mp->bob.pubkey,mp->senderpub);
|
strcpy(mp->bob.pubkey,mp->senderpub);
|
||||||
if ( subatomic_zonly(&mp->base) != 0 || subatomic_zonly(&mp->rel) != 0 )
|
if ( hushdex_zonly(&mp->base) != 0 || hushdex_zonly(&mp->rel) != 0 )
|
||||||
mp->OTCmode = 1;
|
mp->OTCmode = 1;
|
||||||
else mp->OTCmode = SUBATOMIC_OTCDEFAULT;
|
else mp->OTCmode = SUBATOMIC_OTCDEFAULT;
|
||||||
strcpy(origmp->base.name,mp->base.name);
|
strcpy(origmp->base.name,mp->base.name);
|
||||||
@@ -948,14 +918,14 @@ uint32_t subatomic_alice_openrequest(struct msginfo *origmp)
|
|||||||
printf("%u cant do zaddr or fractional base %s.%s tokens %.8f\n",mp->origid,mp->base.coin,mp->base.tokenid,dstr(mp->base.satoshis));
|
printf("%u cant do zaddr or fractional base %s.%s tokens %.8f\n",mp->origid,mp->base.coin,mp->base.tokenid,dstr(mp->base.satoshis));
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
else if ( (openrequest= subatomic_mpjson(mp)) != 0 )
|
else if ( (openrequest= hushdex_mpjson(mp)) != 0 )
|
||||||
{
|
{
|
||||||
hexstr = subatomic_submit(openrequest,!mp->bobflag);
|
hexstr = hushdex_submit(openrequest,!mp->bobflag);
|
||||||
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"openrequest",mp->bob.pubkey,"","")) != 0 )
|
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,hexstr,(char *)"inbox",(char *)"openrequest",mp->bob.pubkey,"","")) != 0 )
|
||||||
{
|
{
|
||||||
mp->openrequestid = juint(retjson,"id");
|
mp->openrequestid = juint(retjson,"id");
|
||||||
printf("%u openrequest.%u -> (%s)\n",mp->origid,mp->openrequestid,mp->bob.pubkey);
|
printf("%u openrequest.%u -> (%s)\n",mp->origid,mp->openrequestid,mp->bob.pubkey);
|
||||||
subatomic_status(mp,SUBATOMIC_OPENREQUEST);
|
hushdex_status(mp,SUBATOMIC_OPENREQUEST);
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
free(hexstr);
|
free(hexstr);
|
||||||
@@ -964,15 +934,15 @@ uint32_t subatomic_alice_openrequest(struct msginfo *origmp)
|
|||||||
return(mp->openrequestid);
|
return(mp->openrequestid);
|
||||||
}
|
}
|
||||||
|
|
||||||
void subatomic_bob_gotopenrequest(uint32_t inboxid,char *senderpub,cJSON *msgjson,char *basename,char *relname)
|
void hushdex_bob_gotopenrequest(uint32_t inboxid,char *senderpub,cJSON *msgjson,char *basename,char *relname)
|
||||||
{
|
{
|
||||||
struct msginfo *mp; cJSON *approval; int32_t origid; char *addr,tmpstr[32],*coin,*acname="";
|
struct msginfo *mp; cJSON *approval; int32_t origid; char *addr,tmpstr[32],*coin,*acname="";
|
||||||
origid = juint(msgjson,"origid");
|
origid = juint(msgjson,"origid");
|
||||||
mp = subatomic_tracker(origid);
|
mp = hushdex_tracker(origid);
|
||||||
strcpy(mp->base.name,basename);
|
strcpy(mp->base.name,basename);
|
||||||
strcpy(mp->base.coin,subatomic_checkname(tmpstr,mp,0,basename));
|
strcpy(mp->base.coin,hushdex_checkname(tmpstr,mp,0,basename));
|
||||||
strcpy(mp->rel.name,relname);
|
strcpy(mp->rel.name,relname);
|
||||||
strcpy(mp->rel.coin,subatomic_checkname(tmpstr,mp,1,relname));
|
strcpy(mp->rel.coin,hushdex_checkname(tmpstr,mp,1,relname));
|
||||||
mp->origid = origid;
|
mp->origid = origid;
|
||||||
mp->rel.satoshis = j64bits(msgjson,"relsatoshis");
|
mp->rel.satoshis = j64bits(msgjson,"relsatoshis");
|
||||||
mp->bobflag = 1;
|
mp->bobflag = 1;
|
||||||
@@ -986,42 +956,42 @@ void subatomic_bob_gotopenrequest(uint32_t inboxid,char *senderpub,cJSON *msgjso
|
|||||||
strcpy(mp->alice.recvZaddr,addr);
|
strcpy(mp->alice.recvZaddr,addr);
|
||||||
if ( (addr= jstr(msgjson,"alicesecp")) != 0 )
|
if ( (addr= jstr(msgjson,"alicesecp")) != 0 )
|
||||||
strcpy(mp->alice.secp,addr);
|
strcpy(mp->alice.secp,addr);
|
||||||
if ( subatomic_zonly(&mp->base) != 0 || subatomic_zonly(&mp->rel) != 0 )
|
if ( hushdex_zonly(&mp->base) != 0 || hushdex_zonly(&mp->rel) != 0 )
|
||||||
mp->OTCmode = 1;
|
mp->OTCmode = 1;
|
||||||
else mp->OTCmode = SUBATOMIC_OTCDEFAULT;
|
else mp->OTCmode = SUBATOMIC_OTCDEFAULT;
|
||||||
printf("%u got open request\n",mp->origid);
|
printf("%u got open request\n",mp->origid);
|
||||||
if ( mp->status == 0 && subatomic_orderbook_mpset(mp,basename) != 0 && (approval= subatomic_mpjson(mp)) != 0 )
|
if ( mp->status == 0 && hushdex_orderbook_mpset(mp,basename) != 0 && (approval= hushdex_mpjson(mp)) != 0 )
|
||||||
{
|
{
|
||||||
if ( mp->rel.istoken != 0 && ((mp->rel.satoshis % SATOSHIDEN) != 0 || mp->rel.iszaddr != 0) )
|
if ( mp->rel.istoken != 0 && ((mp->rel.satoshis % SATOSHIDEN) != 0 || mp->rel.iszaddr != 0) )
|
||||||
{
|
{
|
||||||
printf("%u cant do zaddr or fractional rel %s.%s tokens %.8f\n",mp->origid,mp->rel.coin,mp->rel.tokenid,dstr(mp->rel.satoshis));
|
printf("%u cant do zaddr or fractional rel %s.%s tokens %.8f\n",mp->origid,mp->rel.coin,mp->rel.tokenid,dstr(mp->rel.satoshis));
|
||||||
subatomic_closed(mp,approval,msgjson,senderpub);
|
hushdex_closed(mp,approval,msgjson,senderpub);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( mp->base.istoken != 0 && ((mp->base.satoshis % SATOSHIDEN) != 0 || mp->base.iszaddr != 0 ) )
|
else if ( mp->base.istoken != 0 && ((mp->base.satoshis % SATOSHIDEN) != 0 || mp->base.iszaddr != 0 ) )
|
||||||
{
|
{
|
||||||
printf("%u cant do zaddr or fractional base %s.%s tokens %.8f\n",mp->origid,mp->base.coin,mp->base.tokenid,dstr(mp->base.satoshis));
|
printf("%u cant do zaddr or fractional base %s.%s tokens %.8f\n",mp->origid,mp->base.coin,mp->base.tokenid,dstr(mp->base.satoshis));
|
||||||
subatomic_closed(mp,approval,msgjson,senderpub);
|
hushdex_closed(mp,approval,msgjson,senderpub);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ( subatomic_getbalance(&mp->base) < mp->base.satoshis )
|
else if ( hushdex_getbalance(&mp->base) < mp->base.satoshis )
|
||||||
{
|
{
|
||||||
printf("%u bob node low on %s funds! %.8f not enough for %.8f\n",mp->origid,mp->base.coin,dstr(subatomic_getbalance(&mp->base)),dstr(mp->base.satoshis));
|
printf("%u bob node low on %s funds! %.8f not enough for %.8f\n",mp->origid,mp->base.coin,dstr(hushdex_getbalance(&mp->base)),dstr(mp->base.satoshis));
|
||||||
subatomic_closed(mp,approval,msgjson,senderpub);
|
hushdex_closed(mp,approval,msgjson,senderpub);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("%u bob (%s/%s) gotopenrequest origid.%u status.%d (%s/%s) SENDERPUB.(%s)\n",mp->origid,mp->base.name,mp->rel.name,mp->origid,mp->status,mp->bob.recvaddr,mp->bob.recvZaddr,senderpub);
|
printf("%u bob (%s/%s) gotopenrequest origid.%u status.%d (%s/%s) SENDERPUB.(%s)\n",mp->origid,mp->base.name,mp->rel.name,mp->origid,mp->status,mp->bob.recvaddr,mp->bob.recvZaddr,senderpub);
|
||||||
subatomic_approved(mp,approval,msgjson,senderpub);
|
hushdex_approved(mp,approval,msgjson,senderpub);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_channelapproved(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
int32_t hushdex_channelapproved(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
||||||
{
|
{
|
||||||
struct msginfo *mp; cJSON *approval; char *addr,*coin,*acname; int32_t retval = 0;
|
struct msginfo *mp; cJSON *approval; char *addr,*coin,*acname; int32_t retval = 0;
|
||||||
mp = subatomic_tracker(juint(msgjson,"origid"));
|
mp = hushdex_tracker(juint(msgjson,"origid"));
|
||||||
if ( subatomic_orderbook_mpset(mp,mp->base.name) != 0 && (approval= subatomic_mpjson(mp)) != 0 )
|
if ( hushdex_orderbook_mpset(mp,mp->base.name) != 0 && (approval= hushdex_mpjson(mp)) != 0 )
|
||||||
{
|
{
|
||||||
printf("%u iambob.%d (%s/%s) channelapproved origid.%u status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->origid,mp->status);
|
printf("%u iambob.%d (%s/%s) channelapproved origid.%u status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->origid,mp->status);
|
||||||
if ( mp->bobflag == 0 && mp->status == SUBATOMIC_OPENREQUEST )
|
if ( mp->bobflag == 0 && mp->status == SUBATOMIC_OPENREQUEST )
|
||||||
@@ -1032,46 +1002,46 @@ int32_t subatomic_channelapproved(uint32_t inboxid,char *senderpub,cJSON *msgjso
|
|||||||
strcpy(mp->bob.recvZaddr,addr);
|
strcpy(mp->bob.recvZaddr,addr);
|
||||||
if ( (addr= jstr(msgjson,"bobsecp")) != 0 )
|
if ( (addr= jstr(msgjson,"bobsecp")) != 0 )
|
||||||
strcpy(mp->bob.secp,addr);
|
strcpy(mp->bob.secp,addr);
|
||||||
retval = subatomic_approved(mp,approval,msgjson,senderpub);
|
retval = hushdex_approved(mp,approval,msgjson,senderpub);
|
||||||
}
|
}
|
||||||
else if ( mp->bobflag != 0 && mp->status == SUBATOMIC_APPROVED )
|
else if ( mp->bobflag != 0 && mp->status == SUBATOMIC_APPROVED )
|
||||||
retval = subatomic_opened(mp,approval,msgjson,senderpub);
|
retval = hushdex_opened(mp,approval,msgjson,senderpub);
|
||||||
}
|
}
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_incomingopened(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
int32_t hushdex_incomingopened(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
||||||
{
|
{
|
||||||
struct msginfo *mp; cJSON *payment; int32_t retval = 0;
|
struct msginfo *mp; cJSON *payment; int32_t retval = 0;
|
||||||
mp = subatomic_tracker(juint(msgjson,"origid"));
|
mp = hushdex_tracker(juint(msgjson,"origid"));
|
||||||
if ( subatomic_orderbook_mpset(mp,mp->base.name) != 0 && (payment= subatomic_mpjson(mp)) != 0 )
|
if ( hushdex_orderbook_mpset(mp,mp->base.name) != 0 && (payment= hushdex_mpjson(mp)) != 0 )
|
||||||
{
|
{
|
||||||
printf("%u iambob.%d (%s/%s) incomingchannel status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
printf("%u iambob.%d (%s/%s) incomingchannel status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
||||||
if ( mp->bobflag == 0 && mp->status == SUBATOMIC_APPROVED )
|
if ( mp->bobflag == 0 && mp->status == SUBATOMIC_APPROVED )
|
||||||
retval = subatomic_payment(mp,payment,msgjson,senderpub);
|
retval = hushdex_payment(mp,payment,msgjson,senderpub);
|
||||||
else if ( mp->bobflag != 0 && mp->status == SUBATOMIC_OPENED )
|
else if ( mp->bobflag != 0 && mp->status == SUBATOMIC_OPENED )
|
||||||
retval = 1; // nothing to do
|
retval = 1; // nothing to do
|
||||||
}
|
}
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_incomingpayment(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
int32_t hushdex_incomingpayment(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
||||||
{
|
{
|
||||||
static FILE *fp;
|
static FILE *fp;
|
||||||
struct msginfo *mp; cJSON *pay,*rawtx,*retjson; bits256 txid; char str[65],*hexstr; int32_t retval = 0;
|
struct msginfo *mp; cJSON *pay,*rawtx,*retjson; bits256 txid; char str[65],*hexstr; int32_t retval = 0;
|
||||||
mp = subatomic_tracker(juint(msgjson,"origid"));
|
mp = hushdex_tracker(juint(msgjson,"origid"));
|
||||||
if ( subatomic_orderbook_mpset(mp,mp->base.name) != 0 && (pay= subatomic_mpjson(mp)) != 0 )
|
if ( hushdex_orderbook_mpset(mp,mp->base.name) != 0 && (pay= hushdex_mpjson(mp)) != 0 )
|
||||||
{
|
{
|
||||||
printf("%u iambob.%d (%s/%s) incomingpayment status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
printf("%u iambob.%d (%s/%s) incomingpayment status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
||||||
if ( mp->bobflag == 0 )
|
if ( mp->bobflag == 0 )
|
||||||
{
|
{
|
||||||
txid = jbits256(msgjson,"bobpayment");
|
txid = jbits256(msgjson,"bobpayment");
|
||||||
jaddbits256(msgjson,"alicepayment",mp->alicepayment);
|
jaddbits256(msgjson,"alicepayment",mp->alicepayment);
|
||||||
printf("%u alice waits for %s.%s to be in mempool (%.8f -> %s)\n",mp->origid,mp->base.name,bits256_str(str,txid),dstr(mp->base.satoshis),subatomic_zonly(&mp->base) == 0 ? mp->alice.recvaddr : mp->alice.recvZaddr);
|
printf("%u alice waits for %s.%s to be in mempool (%.8f -> %s)\n",mp->origid,mp->base.name,bits256_str(str,txid),dstr(mp->base.satoshis),hushdex_zonly(&mp->base) == 0 ? mp->alice.recvaddr : mp->alice.recvZaddr);
|
||||||
hexstr = jstr(msgjson,"bobtx");
|
hexstr = jstr(msgjson,"bobtx");
|
||||||
if ( (rawtx= subatomic_txidwait(&mp->base,txid,hexstr,SUBATOMIC_TIMEOUT,senderpub)) != 0 )
|
if ( (rawtx= hushdex_txidwait(&mp->base,txid,hexstr,SUBATOMIC_TIMEOUT,senderpub)) != 0 )
|
||||||
{
|
{
|
||||||
if ( subatomic_verifypayment(&mp->base,rawtx,mp->base.satoshis,subatomic_zonly(&mp->base) == 0 ? mp->alice.recvaddr : mp->alice.recvZaddr,txid) >= 0 )
|
if ( hushdex_verifypayment(&mp->base,rawtx,mp->base.satoshis,hushdex_zonly(&mp->base) == 0 ? mp->alice.recvaddr : mp->alice.recvZaddr,txid) >= 0 )
|
||||||
mp->gotpayment = 1;
|
mp->gotpayment = 1;
|
||||||
free_json(rawtx);
|
free_json(rawtx);
|
||||||
}
|
}
|
||||||
@@ -1103,28 +1073,28 @@ int32_t subatomic_incomingpayment(uint32_t inboxid,char *senderpub,cJSON *msgjso
|
|||||||
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,bits256_str(str,mp->alicepayment),(char *)"incomplete",str,DPOW_pubkeystr,"","")) != 0 )
|
if ( (retjson= dpow_broadcast(SUBATOMIC_PRIORITY,bits256_str(str,mp->alicepayment),(char *)"incomplete",str,DPOW_pubkeystr,"","")) != 0 )
|
||||||
free_json(retjson);
|
free_json(retjson);
|
||||||
}
|
}
|
||||||
subatomic_closed(mp,pay,msgjson,senderpub);
|
hushdex_closed(mp,pay,msgjson,senderpub);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( mp->gotpayment != 0 )
|
if ( mp->gotpayment != 0 )
|
||||||
retval = subatomic_paidinfull(mp,pay,msgjson,senderpub);
|
retval = hushdex_paidinfull(mp,pay,msgjson,senderpub);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( mp->bobflag != 0 && mp->status == SUBATOMIC_OPENED )
|
if ( mp->bobflag != 0 && mp->status == SUBATOMIC_OPENED )
|
||||||
{
|
{
|
||||||
txid = jbits256(msgjson,"alicepayment");
|
txid = jbits256(msgjson,"alicepayment");
|
||||||
printf("%u bob waits for %s.%s to be in mempool (%.8f -> %s)\n",mp->origid,mp->rel.name,bits256_str(str,txid),dstr(mp->rel.satoshis),subatomic_zonly(&mp->rel) == 0 ? mp->bob.recvaddr : mp->bob.recvZaddr);
|
printf("%u bob waits for %s.%s to be in mempool (%.8f -> %s)\n",mp->origid,mp->rel.name,bits256_str(str,txid),dstr(mp->rel.satoshis),hushdex_zonly(&mp->rel) == 0 ? mp->bob.recvaddr : mp->bob.recvZaddr);
|
||||||
hexstr = jstr(msgjson,"alicetx");
|
hexstr = jstr(msgjson,"alicetx");
|
||||||
if ( (rawtx= subatomic_txidwait(&mp->rel,txid,hexstr,SUBATOMIC_TIMEOUT,senderpub)) != 0 )
|
if ( (rawtx= hushdex_txidwait(&mp->rel,txid,hexstr,SUBATOMIC_TIMEOUT,senderpub)) != 0 )
|
||||||
{
|
{
|
||||||
if ( subatomic_verifypayment(&mp->rel,rawtx,mp->rel.satoshis,subatomic_zonly(&mp->rel) == 0 ? mp->bob.recvaddr : mp->bob.recvZaddr,txid) >= 0 )
|
if ( hushdex_verifypayment(&mp->rel,rawtx,mp->rel.satoshis,hushdex_zonly(&mp->rel) == 0 ? mp->bob.recvaddr : mp->bob.recvZaddr,txid) >= 0 )
|
||||||
mp->gotpayment = 1;
|
mp->gotpayment = 1;
|
||||||
free_json(rawtx);
|
free_json(rawtx);
|
||||||
}
|
}
|
||||||
if ( mp->gotpayment != 0 )
|
if ( mp->gotpayment != 0 )
|
||||||
{
|
{
|
||||||
retval = subatomic_payment(mp,pay,msgjson,senderpub);
|
retval = hushdex_payment(mp,pay,msgjson,senderpub);
|
||||||
jaddbits256(msgjson,"bobpayment",mp->bobpayment);
|
jaddbits256(msgjson,"bobpayment",mp->bobpayment);
|
||||||
if ( mp->rel.iszaddr == 0 )
|
if ( mp->rel.iszaddr == 0 )
|
||||||
{
|
{
|
||||||
@@ -1151,42 +1121,42 @@ int32_t subatomic_incomingpayment(uint32_t inboxid,char *senderpub,cJSON *msgjso
|
|||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_incomingfullypaid(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
int32_t hushdex_incomingfullypaid(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
||||||
{
|
{
|
||||||
struct msginfo *mp; cJSON *closed; int32_t retval = 0;
|
struct msginfo *mp; cJSON *closed; int32_t retval = 0;
|
||||||
mp = subatomic_tracker(juint(msgjson,"origid"));
|
mp = hushdex_tracker(juint(msgjson,"origid"));
|
||||||
if ( subatomic_orderbook_mpset(mp,mp->base.name) != 0 && (closed= subatomic_mpjson(mp)) != 0 )
|
if ( hushdex_orderbook_mpset(mp,mp->base.name) != 0 && (closed= hushdex_mpjson(mp)) != 0 )
|
||||||
{
|
{
|
||||||
printf("%u iambob.%d (%s/%s) incomingfullypaid status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
printf("%u iambob.%d (%s/%s) incomingfullypaid status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
||||||
// error check msgjson vs M
|
// error check msgjson vs M
|
||||||
if ( mp->bobflag == 0 && mp->status == SUBATOMIC_PAIDINFULL )
|
if ( mp->bobflag == 0 && mp->status == SUBATOMIC_PAIDINFULL )
|
||||||
retval = subatomic_closed(mp,closed,msgjson,senderpub);
|
retval = hushdex_closed(mp,closed,msgjson,senderpub);
|
||||||
else if ( mp->bobflag != 0 && mp->status == SUBATOMIC_PAYMENT )
|
else if ( mp->bobflag != 0 && mp->status == SUBATOMIC_PAYMENT )
|
||||||
retval = subatomic_paidinfull(mp,closed,msgjson,senderpub);
|
retval = hushdex_paidinfull(mp,closed,msgjson,senderpub);
|
||||||
}
|
}
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_incomingclosed(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
int32_t hushdex_incomingclosed(uint32_t inboxid,char *senderpub,cJSON *msgjson,struct msginfo *origmp)
|
||||||
{
|
{
|
||||||
struct msginfo *mp; cJSON *closed; int32_t retval = 0;
|
struct msginfo *mp; cJSON *closed; int32_t retval = 0;
|
||||||
mp = subatomic_tracker(juint(msgjson,"origid"));
|
mp = hushdex_tracker(juint(msgjson,"origid"));
|
||||||
if ( subatomic_orderbook_mpset(mp,mp->base.name) != 0 && (closed= subatomic_mpjson(mp)) != 0 )
|
if ( hushdex_orderbook_mpset(mp,mp->base.name) != 0 && (closed= hushdex_mpjson(mp)) != 0 )
|
||||||
{
|
{
|
||||||
printf("%u iambob.%d (%s/%s) incomingclose status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
printf("%u iambob.%d (%s/%s) incomingclose status.%d\n",mp->origid,mp->bobflag,mp->base.name,mp->rel.name,mp->status);
|
||||||
if ( mp->bobflag != 0 )
|
if ( mp->bobflag != 0 )
|
||||||
dpow_cancel(mp->origid);
|
dpow_cancel(mp->origid);
|
||||||
if ( mp->status < SUBATOMIC_CLOSED )
|
if ( mp->status < SUBATOMIC_CLOSED )
|
||||||
{
|
{
|
||||||
retval = subatomic_closed(mp,closed,msgjson,senderpub);
|
retval = hushdex_closed(mp,closed,msgjson,senderpub);
|
||||||
subatomic_status(mp,SUBATOMIC_CLOSED);
|
hushdex_status(mp,SUBATOMIC_CLOSED);
|
||||||
}
|
}
|
||||||
retval = 1;
|
retval = 1;
|
||||||
}
|
}
|
||||||
return(retval);
|
return(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t subatomic_ismine(int32_t bobflag,cJSON *json,char *basename,char *relname)
|
int32_t hushdex_ismine(int32_t bobflag,cJSON *json,char *basename,char *relname)
|
||||||
{
|
{
|
||||||
char *base,*rel;
|
char *base,*rel;
|
||||||
if ( (base= jstr(json,"base")) != 0 && (rel= jstr(json,"rel")) != 0 )
|
if ( (base= jstr(json,"base")) != 0 && (rel= jstr(json,"rel")) != 0 )
|
||||||
@@ -1203,7 +1173,7 @@ int32_t subatomic_ismine(int32_t bobflag,cJSON *json,char *basename,char *relnam
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void subatomic_tokensregister(int32_t priority)
|
void hushdex_tokensregister(int32_t priority)
|
||||||
{
|
{
|
||||||
char *token_name,*tokenid,existing[65]; cJSON *tokens,*token; int32_t i,numtokens;
|
char *token_name,*tokenid,existing[65]; cJSON *tokens,*token; int32_t i,numtokens;
|
||||||
if ( SUBATOMIC_json != 0 && (tokens= jarray(&numtokens,SUBATOMIC_json,"tokens")) != 0 )
|
if ( SUBATOMIC_json != 0 && (tokens= jarray(&numtokens,SUBATOMIC_json,"tokens")) != 0 )
|
||||||
@@ -1223,7 +1193,7 @@ void subatomic_tokensregister(int32_t priority)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void subatomic_filesregister(int32_t priority)
|
void hushdex_filesregister(int32_t priority)
|
||||||
{
|
{
|
||||||
char *fname,*tokenid,*coin,existing[512]; int64_t price; cJSON *files,*file,*prices; int32_t i,j,m,numfiles;
|
char *fname,*tokenid,*coin,existing[512]; int64_t price; cJSON *files,*file,*prices; int32_t i,j,m,numfiles;
|
||||||
if ( SUBATOMIC_json != 0 && (files= jarray(&numfiles,SUBATOMIC_json,"files")) != 0 )
|
if ( SUBATOMIC_json != 0 && (files= jarray(&numfiles,SUBATOMIC_json,"files")) != 0 )
|
||||||
@@ -1233,7 +1203,7 @@ void subatomic_filesregister(int32_t priority)
|
|||||||
file = jitem(files,i);
|
file = jitem(files,i);
|
||||||
if ( file != 0 )
|
if ( file != 0 )
|
||||||
{
|
{
|
||||||
// {"filename":"komodod",prices:[{"KMD":0.1}, {"PIRATE:1"}]}
|
// {"filename":"hushd",prices:[{"HUSH":1}, {"ZEC:1"}]}
|
||||||
fname = jstr(file,"filename");
|
fname = jstr(file,"filename");
|
||||||
if ( (prices= jarray(&m,file,"prices")) != 0 && m > 0 )
|
if ( (prices= jarray(&m,file,"prices")) != 0 && m > 0 )
|
||||||
{
|
{
|
||||||
@@ -1251,12 +1221,12 @@ void subatomic_filesregister(int32_t priority)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void subatomic_loop(struct msginfo *mp)
|
void hushdex_loop(struct msginfo *mp)
|
||||||
{
|
{
|
||||||
static char *tagBs[] = { "openrequest", "approved", "opened", "payment", "paid", "closed" };
|
static char *tagBs[] = { "openrequest", "approved", "opened", "payment", "paid", "closed" };
|
||||||
static uint32_t stopats[sizeof(tagBs)/sizeof(*tagBs)];
|
static uint32_t stopats[sizeof(tagBs)/sizeof(*tagBs)];
|
||||||
struct inboxinfo **ptrs,*ptr; char *tagB; int32_t i,iter,n,msgs=0,mask=0; cJSON *inboxjson;
|
struct inboxinfo **ptrs,*ptr; char *tagB; int32_t i,iter,n,msgs=0,mask=0; cJSON *inboxjson;
|
||||||
fprintf(stderr,"start subatomic_loop iambob.%d %s -> %s, %u %llu %u\n",mp->bobflag,mp->base.name,mp->rel.name,mp->origid,(long long)mp->rel.satoshis,mp->openrequestid);
|
fprintf(stderr,"start hushdex_loop iambob.%d %s -> %s, %u %llu %u\n",mp->bobflag,mp->base.name,mp->rel.name,mp->origid,(long long)mp->rel.satoshis,mp->openrequestid);
|
||||||
while ( 1 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
if ( msgs == 0 )
|
if ( msgs == 0 )
|
||||||
@@ -1266,8 +1236,8 @@ void subatomic_loop(struct msginfo *mp)
|
|||||||
if ( mp->bobflag != 0 )
|
if ( mp->bobflag != 0 )
|
||||||
{
|
{
|
||||||
dpow_pubkeyregister(SUBATOMIC_PRIORITY);
|
dpow_pubkeyregister(SUBATOMIC_PRIORITY);
|
||||||
subatomic_tokensregister(SUBATOMIC_PRIORITY);
|
hushdex_tokensregister(SUBATOMIC_PRIORITY);
|
||||||
subatomic_filesregister(SUBATOMIC_PRIORITY);
|
hushdex_filesregister(SUBATOMIC_PRIORITY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
msgs = 0;
|
msgs = 0;
|
||||||
@@ -1285,24 +1255,24 @@ void subatomic_loop(struct msginfo *mp)
|
|||||||
{
|
{
|
||||||
if ( jint(inboxjson,"tobob") != mp->bobflag )
|
if ( jint(inboxjson,"tobob") != mp->bobflag )
|
||||||
continue;
|
continue;
|
||||||
if ( subatomic_ismine(mp->bobflag,inboxjson,mp->base.name,mp->rel.name) != 0 )
|
if ( hushdex_ismine(mp->bobflag,inboxjson,mp->base.name,mp->rel.name) != 0 )
|
||||||
{
|
{
|
||||||
if ( strcmp(tagB,"openrequest") == 0 && mp->bobflag != 0 )
|
if ( strcmp(tagB,"openrequest") == 0 && mp->bobflag != 0 )
|
||||||
subatomic_bob_gotopenrequest(ptr->shorthash,ptr->senderpub,inboxjson,mp->base.name,mp->rel.name);
|
hushdex_bob_gotopenrequest(ptr->shorthash,ptr->senderpub,inboxjson,mp->base.name,mp->rel.name);
|
||||||
else if ( strcmp(tagB,"approved") == 0 )
|
else if ( strcmp(tagB,"approved") == 0 )
|
||||||
mask |= subatomic_channelapproved(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 0;
|
mask |= hushdex_channelapproved(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 0;
|
||||||
else if ( strcmp(tagB,"opened") == 0 )
|
else if ( strcmp(tagB,"opened") == 0 )
|
||||||
mask |= subatomic_incomingopened(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 1;
|
mask |= hushdex_incomingopened(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 1;
|
||||||
else if ( strcmp(tagB,"payment") == 0 )
|
else if ( strcmp(tagB,"payment") == 0 )
|
||||||
mask |= subatomic_incomingpayment(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 2;
|
mask |= hushdex_incomingpayment(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 2;
|
||||||
else if ( strcmp(tagB,"paid") == 0 )
|
else if ( strcmp(tagB,"paid") == 0 )
|
||||||
mask |= subatomic_incomingfullypaid(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 3;
|
mask |= hushdex_incomingfullypaid(ptr->shorthash,ptr->senderpub,inboxjson,mp) << 3;
|
||||||
else if ( strcmp(tagB,"closed") == 0 )
|
else if ( strcmp(tagB,"closed") == 0 )
|
||||||
mask |= subatomic_incomingclosed(ptr->shorthash,ptr->senderpub,inboxjson,mp) * 0x1f;
|
mask |= hushdex_incomingclosed(ptr->shorthash,ptr->senderpub,inboxjson,mp) * 0x1f;
|
||||||
else fprintf(stderr,"iambob.%d unknown unexpected tagB.(%s)\n",mp->bobflag,tagB);
|
else fprintf(stderr,"iambob.%d unknown unexpected tagB.(%s)\n",mp->bobflag,tagB);
|
||||||
}
|
}
|
||||||
free_json(inboxjson);
|
free_json(inboxjson);
|
||||||
} else fprintf(stderr,"subatomic iambob.%d loop got unparseable(%s)\n",mp->bobflag,ptr->jsonstr);
|
} else fprintf(stderr,"hushdex iambob.%d loop got unparseable(%s)\n",mp->bobflag,ptr->jsonstr);
|
||||||
free(ptr);
|
free(ptr);
|
||||||
ptrs[i] = 0;
|
ptrs[i] = 0;
|
||||||
}
|
}
|
||||||
@@ -1320,40 +1290,36 @@ void subatomic_loop(struct msginfo *mp)
|
|||||||
|
|
||||||
int32_t main(int32_t argc,char **argv)
|
int32_t main(int32_t argc,char **argv)
|
||||||
{
|
{
|
||||||
char *fname = "subatomic.json";
|
char *fname = "hushdex.json";
|
||||||
int32_t i,height; char *coin,*kcli,*subatomic,*hashstr,*acname=(char *)""; cJSON *retjson; bits256 blockhash; char checkstr[65],str[65],str2[65],tmpstr[32]; long fsize; struct msginfo M;
|
int32_t i,height; char *coin,*kcli,*hushdex,*hashstr,*acname=(char *)""; cJSON *retjson; bits256 blockhash; char checkstr[65],str[65],str2[65],tmpstr[32]; long fsize; struct msginfo M;
|
||||||
memset(&M,0,sizeof(M));
|
memset(&M,0,sizeof(M));
|
||||||
srand((int32_t)time(NULL));
|
srand((int32_t)time(NULL));
|
||||||
if ( (subatomic= filestr(&fsize,fname)) == 0 )
|
if ( (hushdex= filestr(&fsize,fname)) == 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"cant load %s file\n",fname);
|
fprintf(stderr,"cant load %s file\n",fname);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
if ( (SUBATOMIC_json= cJSON_Parse(subatomic)) == 0 )
|
if ( (SUBATOMIC_json= cJSON_Parse(hushdex)) == 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"cant parse subatomic.json file (%s)\n",subatomic);
|
fprintf(stderr,"cant parse hushdex.json file (%s)\n",hushdex);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
free(subatomic);
|
free(hushdex);
|
||||||
if ( argc >= 4 )
|
if ( argc >= 4 )
|
||||||
{
|
{
|
||||||
if ( dpow_pubkey() < 0 )
|
if ( dpow_pubkey() < 0 )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"couldnt set pubkey for DEX\n");
|
fprintf(stderr,"couldnt set pubkey for ZEX\n");
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
coin = (char *)argv[1];
|
coin = (char *)argv[1];
|
||||||
if ( argv[2][0] != 0 )
|
if ( argv[2][0] != 0 ) {
|
||||||
REFCOIN_CLI = (char *)argv[2];
|
REFCOIN_CLI = (char *)argv[2];
|
||||||
else
|
} else {
|
||||||
{
|
acname = coin;
|
||||||
if ( strcmp(coin,"KMD") != 0 )
|
|
||||||
{
|
|
||||||
acname = coin;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
hashstr = (char *)argv[3];
|
hashstr = (char *)argv[3];
|
||||||
strcpy(M.rel.coin,subatomic_checkname(tmpstr,&M,1,coin));
|
strcpy(M.rel.coin,hushdex_checkname(tmpstr,&M,1,coin));
|
||||||
strcpy(M.rel.name,coin);
|
strcpy(M.rel.name,coin);
|
||||||
if ( argc == 4 && strlen(hashstr) == 64 ) // for blocknotify usage, seems not needed
|
if ( argc == 4 && strlen(hashstr) == 64 ) // for blocknotify usage, seems not needed
|
||||||
{
|
{
|
||||||
@@ -1404,24 +1370,24 @@ int32_t main(int32_t argc,char **argv)
|
|||||||
mult = SATOSHIDEN;
|
mult = SATOSHIDEN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( subatomic_getbalance(&M.rel) < M.rel.satoshis/mult )
|
if ( hushdex_getbalance(&M.rel) < M.rel.satoshis/mult )
|
||||||
{
|
{
|
||||||
fprintf(stderr,"not enough balance %s %.8f for %.8f\n",M.rel.coin,dstr(subatomic_getbalance(&M.rel)),dstr(M.rel.satoshis/mult));
|
fprintf(stderr,"not enough balance %s %.8f for %.8f\n",M.rel.coin,dstr(hushdex_getbalance(&M.rel)),dstr(M.rel.satoshis/mult));
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
fprintf(stderr,"subatomic_channel_alice (%s/%s) %s %u with %.8f %llu\n",M.rel.name,M.rel.coin,hashstr,M.origid,atof(argv[4]),(long long)M.rel.satoshis);
|
fprintf(stderr,"hushdex_channel_alice (%s/%s) %s %u with %.8f %llu\n",M.rel.name,M.rel.coin,hashstr,M.origid,atof(argv[4]),(long long)M.rel.satoshis);
|
||||||
dpow_pubkeyregister(SUBATOMIC_PRIORITY);
|
dpow_pubkeyregister(SUBATOMIC_PRIORITY);
|
||||||
M.openrequestid = subatomic_alice_openrequest(&M);
|
M.openrequestid = hushdex_alice_openrequest(&M);
|
||||||
if ( M.openrequestid != 0 )
|
if ( M.openrequestid != 0 )
|
||||||
subatomic_loop(&M);
|
hushdex_loop(&M);
|
||||||
} else fprintf(stderr,"checkstr mismatch %s %s != %s\n",coin,hashstr,checkstr);
|
} else fprintf(stderr,"checkstr mismatch %s %s != %s\n",coin,hashstr,checkstr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
M.bobflag = 1;
|
M.bobflag = 1;
|
||||||
strcpy(M.base.name,hashstr);
|
strcpy(M.base.name,hashstr);
|
||||||
strcpy(M.base.coin,subatomic_checkname(tmpstr,&M,0,hashstr));
|
strcpy(M.base.coin,hushdex_checkname(tmpstr,&M,0,hashstr));
|
||||||
subatomic_loop(&M); // while ( 1 ) loop for each relcoin -> basecoin
|
hushdex_loop(&M); // while ( 1 ) loop for each relcoin -> basecoin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return(SUBATOMIC_retval);
|
return(SUBATOMIC_retval);
|
||||||
19
src/cc/dapps/hushdex.json
Normal file
19
src/cc/dapps/hushdex.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"authorized": [
|
||||||
|
{"dukeleto":"030554bffcf6dfcb34a20c486ff0a5be5546b9cc16fba969216527263f8e98c4af" },
|
||||||
|
{"gilardh":"020554bffcf6dfcb34a20c486ff5a5be5546b9cc06fba9692165272b3f8e98c448" },
|
||||||
|
{"nhdigitalcash":"030554bffcf6dfcb34a20c086ff5a5be5546b9cc16fba9692105272b3f8e98c4a0" },
|
||||||
|
{"miodrag":"02b25de3ee5335518b06f69f4fbabb029cfc737603b100996841d5532b324a5a61" }
|
||||||
|
],
|
||||||
|
"tokens":[
|
||||||
|
],
|
||||||
|
"files":[
|
||||||
|
{"filename":"hushd","prices":[{"HUSH":0.1}, {"ZEC":1}]}
|
||||||
|
],
|
||||||
|
"externalcoins":[
|
||||||
|
{ "BTC":"bitcoin-cli" },
|
||||||
|
{ "HUSH":"hush-cli" },
|
||||||
|
{ "ZEC":"zcash-cli" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"authorized": [
|
|
||||||
{"chmex":"030754bffcf6dfcb34a20c486ff5a5be5546b9cc16fba9692165272b3f8e98c4af" },
|
|
||||||
{"SHossain":"03c8657bd57b6ceb14514a10e99fe8a0cec5a9bc24592df7f66f050e670e4f6bac" },
|
|
||||||
{"satinder":"03732f8ef851ff234c74d0df575c2c5b159e2bab3faca4ec52b3f217d5cda5361d" },
|
|
||||||
{"ml777":"02453d028c74cb9551e1aaf35113383b6ecbd9f06ff23a4ab1a953429b9763e345" },
|
|
||||||
{"tonylhub":"0218e0f435d4544404c25a7759b7f7174d821215085ef936218c5569d975af468b" },
|
|
||||||
{"gthub":"036c7de9a5090fbad78b9eea41549ccacc07bd0e9e7f8d290c88f470f3569e1a35" },
|
|
||||||
{"zkTrader":"026c6b0b35ec0adc2f8a5c648da1fce634f798c69d5e9fe518400447e88398b830" },
|
|
||||||
{"nutellalicka":"03aee08860e0340f0f490a3ef3718d6676882f2d63d4f536dfebb1d348b82c79ee" },
|
|
||||||
{"gcharang":"02d3431950c2f0f9654217b6ce3d44468d3a9ca7255741767fdeee7c5ec6b47567" },
|
|
||||||
{"jl777":"02b27de3ee5335518b06f69f4fbabb029cfc737613b100996841d5532b324a5a61" }
|
|
||||||
],
|
|
||||||
"tokens":[
|
|
||||||
{"RICK.demo":"2b1feef719ecb526b07416dd432bce603ac6dc8bfe794cddf105cb52f6aae3cd"}
|
|
||||||
],
|
|
||||||
"files":[
|
|
||||||
{"filename":"hushd","prices":[{"HUSH":0.1}, {"PIRATE":1}]}
|
|
||||||
],
|
|
||||||
"externalcoins":[
|
|
||||||
{ "BTC":"bitcoin-cli" },
|
|
||||||
{ "KMD":"komodod-cli" },
|
|
||||||
{ "CHIPS":"chips-cli" },
|
|
||||||
{ "PIRATE":"pirate-cli" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -55,8 +55,8 @@ void vcalc_sha256(char hashstr[(256 >> 3) * 2 + 1],uint8_t hash[256 >> 3],uint8_
|
|||||||
void vcalc_sha256cat(uint8_t hash[256 >> 3],uint8_t *src,int32_t len,uint8_t *src2,int32_t len2);
|
void vcalc_sha256cat(uint8_t hash[256 >> 3],uint8_t *src,int32_t len,uint8_t *src2,int32_t len2);
|
||||||
void vupdate_sha256(uint8_t hash[256 >> 3],struct sha256_vstate *state,uint8_t *src,int32_t len);
|
void vupdate_sha256(uint8_t hash[256 >> 3],struct sha256_vstate *state,uint8_t *src,int32_t len);
|
||||||
bits256 curve25519_shared(bits256 privkey,bits256 otherpub);
|
bits256 curve25519_shared(bits256 privkey,bits256 otherpub);
|
||||||
int32_t iguana_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
int32_t dragon_rwnum(int32_t rwflag,uint8_t *serialized,int32_t len,void *endianedp);
|
||||||
int32_t iguana_rwbignum(int32_t rwflag,uint8_t *serialized,int32_t len,uint8_t *endianedp);
|
int32_t dragon_rwbignum(int32_t rwflag,uint8_t *serialized,int32_t len,uint8_t *endianedp);
|
||||||
|
|
||||||
uint32_t calc_crc32(uint32_t crc,const void *buf,size_t size);
|
uint32_t calc_crc32(uint32_t crc,const void *buf,size_t size);
|
||||||
uint64_t conv_NXTpassword(unsigned char *mysecret,unsigned char *mypublic,uint8_t *pass,int32_t passlen);
|
uint64_t conv_NXTpassword(unsigned char *mysecret,unsigned char *mypublic,uint8_t *pass,int32_t passlen);
|
||||||
|
|||||||
@@ -384,7 +384,7 @@ int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t
|
|||||||
{
|
{
|
||||||
if ( len == 32 )
|
if ( len == 32 )
|
||||||
{
|
{
|
||||||
iguana_rwbignum(0,&data[offset],len,(uint8_t *)hashp);
|
dragon_rwbignum(0,&data[offset],len,(uint8_t *)hashp);
|
||||||
if ( str != 0 )
|
if ( str != 0 )
|
||||||
sprintf(str,"%s",uint256_str(_str,*hashp));
|
sprintf(str,"%s",uint256_str(_str,*hashp));
|
||||||
}
|
}
|
||||||
@@ -395,9 +395,9 @@ int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t
|
|||||||
switch ( len )
|
switch ( len )
|
||||||
{
|
{
|
||||||
case 1: val = (int8_t)data[offset]; break;
|
case 1: val = (int8_t)data[offset]; break;
|
||||||
case 2: iguana_rwnum(0,&data[offset],len,(void *)&val16); val = val16; break;
|
case 2: dragon_rwnum(0,&data[offset],len,(void *)&val16); val = val16; break;
|
||||||
case 4: iguana_rwnum(0,&data[offset],len,(void *)&val32); val = val32; break;
|
case 4: dragon_rwnum(0,&data[offset],len,(void *)&val32); val = val32; break;
|
||||||
case 8: iguana_rwnum(0,&data[offset],len,(void *)&val); break;
|
case 8: dragon_rwnum(0,&data[offset],len,(void *)&val); break;
|
||||||
}
|
}
|
||||||
if ( str != 0 )
|
if ( str != 0 )
|
||||||
sprintf(str,"%lld",(long long)val);
|
sprintf(str,"%lld",(long long)val);
|
||||||
@@ -408,9 +408,9 @@ int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t
|
|||||||
switch ( len )
|
switch ( len )
|
||||||
{
|
{
|
||||||
case 1: uval = data[offset]; break;
|
case 1: uval = data[offset]; break;
|
||||||
case 2: iguana_rwnum(0,&data[offset],len,(void *)&uval16); uval = uval16; break;
|
case 2: dragon_rwnum(0,&data[offset],len,(void *)&uval16); uval = uval16; break;
|
||||||
case 4: iguana_rwnum(0,&data[offset],len,(void *)&uval32); uval = uval32; break;
|
case 4: dragon_rwnum(0,&data[offset],len,(void *)&uval32); uval = uval32; break;
|
||||||
case 8: iguana_rwnum(0,&data[offset],len,(void *)&uval); break;
|
case 8: dragon_rwnum(0,&data[offset],len,(void *)&uval); break;
|
||||||
}
|
}
|
||||||
if ( str != 0 )
|
if ( str != 0 )
|
||||||
sprintf(str,"%llu",(long long)uval);
|
sprintf(str,"%llu",(long long)uval);
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
args="$@"
|
|
||||||
komodo_cli='./komodo-cli'
|
|
||||||
|
|
||||||
./listassetchains | while read chain; do
|
|
||||||
echo $chain
|
|
||||||
$komodo_cli --ac_name=$chain $args
|
|
||||||
done
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=AXO $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BEER $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BET $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BNTN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BOTS $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=BTCH $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CCL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CEAL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CHAIN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=COQUICASH $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=CRYPTO $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=DEX $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=DION $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=DSEC $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=EQL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=ETOMIC $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=GLXT $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=HODL $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=ILN $1 $2 $3 $4 $5 $6
|
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=ILN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=JUMBLR $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=K64 $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=KMDICE $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=KOIN $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=KSB $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=KV $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MESH $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MGNX $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MGW $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MNZ $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MORTY $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=MSHARK $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=NINJA $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=OOT $1 $2 $3 $4 $5 $6
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
./komodo-cli -ac_name=OUR $1 $2 $3 $4 $5 $6
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user