dexorder
This commit is contained in:
48
bin/build
Executable file
48
bin/build
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
# this script requires the jq command $(sudo apt install jq)
|
||||
|
||||
# build_args=$(echo "$@" | sed 's/--debug//')
|
||||
build_args=$(echo "$@")
|
||||
|
||||
## force full rebuild
|
||||
#echo Full build, not incremental...
|
||||
#rm -rf out/ broadcast/ cache/ gen/
|
||||
|
||||
# first-pass build
|
||||
echo Building...
|
||||
forge build $build_args || exit 1
|
||||
|
||||
# Debug print
|
||||
# if echo "$@" | grep -wqe "--debug"; then
|
||||
# echo Orderlib.sol should be first, if not then build --force should be triggered
|
||||
# date
|
||||
# OrderLib_deps
|
||||
# fi
|
||||
|
||||
# Rebuild --force if OrderLib dependencies not built due to bug in forge
|
||||
# if [ "./src/OrderLib.sol" != $(OrderLib_deps | head -n 1 | colrm 1 36) ]; then
|
||||
# echo Rebuild --force because OrderLib dependencies not built due to forge bug...
|
||||
# rm -rf out
|
||||
# forge build --force "$@" || exit 1
|
||||
# fi
|
||||
|
||||
# calculate the Vault init code hash using the bytecode generated for Vault
|
||||
# shellcheck disable=SC2046
|
||||
VAULT_INIT_CODE_HASH=$(cast keccak $(jq -r .bytecode.object < out/Vault.sol/Vault.json))
|
||||
|
||||
# put the hash value into the VaultAddress.sol source file
|
||||
sed -i "s/VAULT_INIT_CODE_HASH = .*;/VAULT_INIT_CODE_HASH = $VAULT_INIT_CODE_HASH;/" src/more/VaultAddress.sol
|
||||
|
||||
# final build after init code hash is set
|
||||
echo Build VaultAddress.sol...
|
||||
forge build $build_args || exit 1
|
||||
|
||||
# Debug print
|
||||
|
||||
# if echo "$@" | grep -wqe "--debug"; then
|
||||
# echo all compiled files:
|
||||
# dated_flist "./out/*/*.json"
|
||||
# dated_flist ./src/OrderLib.sol
|
||||
# fi
|
||||
|
||||
echo Contracts built successfully.
|
||||
52
bin/deploy
Executable file
52
bin/deploy
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ "$1" == "" ]; then
|
||||
echo tag required
|
||||
echo "$0" [tag]
|
||||
fi
|
||||
|
||||
if [ "$TREZOR" != "" ]; then
|
||||
WALLET_OPTS="--trezor --mnemonic-indexes $TREZOR"
|
||||
else
|
||||
PRIVKEY=${PRIVATE_KEY:='0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'}
|
||||
WALLET_OPTS="--private-key $PRIVKEY"
|
||||
fi
|
||||
|
||||
TAG=$1
|
||||
RPC=${RPC_URL:-http://localhost:8545}
|
||||
CHAINID=$(cast chain-id --rpc-url "$RPC")
|
||||
|
||||
cpbroadcast() {
|
||||
CONTRACT=$1
|
||||
mkdir -p deployment/"$TAG"/broadcast/"$CONTRACT"/"$CHAINID"
|
||||
cp broadcast/"$CONTRACT"/"$CHAINID"/run-latest.json deployment/"$TAG"/broadcast/"$CONTRACT"/"$CHAINID"/run-latest.json
|
||||
}
|
||||
|
||||
rm -rf out/ broadcast/ cache/
|
||||
./bin/build || exit 1
|
||||
|
||||
rm -rf deployment/"$TAG"
|
||||
mkdir -p deployment/"$TAG"
|
||||
cp -r out deployment/"$TAG"/
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
forge script script/Deploy.sol -vvvv --fork-url "$RPC" --broadcast $WALLET_OPTS
|
||||
cpbroadcast Deploy.sol
|
||||
|
||||
if [ "$2" == "mock" ]; then
|
||||
sleep 1
|
||||
# shellcheck disable=SC2086
|
||||
forge script script/DeployMock.sol -vvvv --fork-url "$RPC" --broadcast $WALLET_OPTS
|
||||
cpbroadcast DeployMock.sol
|
||||
fi
|
||||
|
||||
if [ "$2" == "mirror" ]; then
|
||||
sleep 1
|
||||
# shellcheck disable=SC2086
|
||||
forge script script/DeployMock.sol -vvvv --fork-url "$RPC" --broadcast $WALLET_OPTS
|
||||
cpbroadcast DeployMock.sol
|
||||
sleep 1
|
||||
# shellcheck disable=SC2086
|
||||
forge script script/DeployMirror.sol -vvvv --fork-url "$RPC" --broadcast $WALLET_OPTS
|
||||
cpbroadcast DeployMirror.sol
|
||||
fi
|
||||
3
bin/gas
Executable file
3
bin/gas
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
#./bin/build
|
||||
forge test --gas-report --fork-url arbitrum_test --mc 'TestExecute' "$@"
|
||||
33
bin/getprice
Executable file
33
bin/getprice
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
# mockchain price
|
||||
source bin/shmockenv
|
||||
SQRTX96=$(cast call $MOCKENV "price()" | cast to-dec)
|
||||
D0=$T0DEC
|
||||
D1=$T1DEC
|
||||
T0INT=$(cast to-dec $TOKEN0)
|
||||
T1INT=$(cast to-dec $TOKEN1)
|
||||
#echo $T0INT $T1INT
|
||||
INVERTED=$(echo $T0INT '>' $T1INT | bc)
|
||||
else
|
||||
# pool price
|
||||
SQRTX96=$(cast call "$1" "slot0()(uint160,int24,uint16,uint16,uint16,uint8,bool)" | head -1 | cut -d ' ' -f 1)
|
||||
T0=$(cast call "$1" "token0()" | cast parse-bytes32-address)
|
||||
D0=$(cast call "$T0" "decimals()" | cast to-dec)
|
||||
T1=$(cast call "$1" "token1()" | cast parse-bytes32-address)
|
||||
D1=$(cast call "$T1" "decimals()" | cast to-dec)
|
||||
echo sqrtX96 $SQRTX96
|
||||
echo decimals $D0 $D1
|
||||
INVERTED=0
|
||||
fi
|
||||
#echo sqrtX96 $SQRTX96
|
||||
echo inverted $INVERTED
|
||||
if [ "$INVERTED" == "0" ]; then
|
||||
echo inverted
|
||||
FORMULA='scale=18; '"$SQRTX96"'^2 * 10^('"$D0"-"$D1"') / 2^(96*2)'
|
||||
else
|
||||
FORMULA='scale=18; 2^(96*2) * 10^('"$D1"-"$D0"') / '"$SQRTX96"'^2'
|
||||
fi
|
||||
#echo "$FORMULA"
|
||||
echo "$FORMULA" | bc
|
||||
2
bin/mine
Executable file
2
bin/mine
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
cast rpc evm_mine &> /dev/null && echo mined a block || echo FAILED >&2
|
||||
30
bin/mock
Executable file
30
bin/mock
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# 0xac097 is dev account #0 used for Deploy scripts
|
||||
DEFAULT_KEY='0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'
|
||||
FORK_URL=http://localhost:8545
|
||||
|
||||
./bin/build
|
||||
|
||||
anvil -f arbitrum_mock --chain-id 31337 &
|
||||
ANVIL_PID=$!
|
||||
sleep 2
|
||||
|
||||
forge script script/Deploy.sol --skip Test --fork-url $FORK_URL --broadcast \
|
||||
--private-key ${PRIVATE_KEY:-$DEFAULT_KEY} || err deploy
|
||||
|
||||
forge script script/DeployMock.sol --skip Test --fork-url $FORK_URL --broadcast \
|
||||
--private-key ${PRIVATE_KEY:-$DEFAULT_KEY} || err deploymock
|
||||
|
||||
forge script script/DeployMirror.sol --skip Test --fork-url $FORK_URL --broadcast \
|
||||
--private-key ${PRIVATE_KEY:-$DEFAULT_KEY} || err deploymirror
|
||||
|
||||
trap_ctrlc() {
|
||||
echo exiting anvil
|
||||
kill $ANVIL_PID
|
||||
}
|
||||
|
||||
trap trap_ctrlc INT
|
||||
|
||||
# wait for all background processes to terminate
|
||||
wait
|
||||
18
bin/setprice
Executable file
18
bin/setprice
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
. bin/shmockenv
|
||||
|
||||
#echo inverted $INVERTED
|
||||
if [ "$INVERTED" == "1" ]; then
|
||||
INV='1/'
|
||||
else
|
||||
INV=
|
||||
fi
|
||||
echo INV $INVERTED
|
||||
FORMULA='scale=100; big='"$INV""$1"'*10^('"$T1DEC"'-'"$T0DEC"')*2^(96*2); scale=0; sqrt(big)'
|
||||
#echo $FORMULA
|
||||
#echo "$FORMULA" | bc
|
||||
SQRTX96=$(echo "$FORMULA" | bc | head -1 | cut -d '.' -f 1)
|
||||
#echo sqrtX96 $SQRTX96
|
||||
TMP=$(mktemp)
|
||||
cast send --private-key 0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 "$MOCKENV" 'swapToPrice(uint160)' "$SQRTX96" > "$TMP" || cat "$TMP"
|
||||
12
bin/shenv
Executable file
12
bin/shenv
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
|
||||
# private key for Dev Account #9
|
||||
export DEV9=0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6
|
||||
|
||||
export WETH=0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
|
||||
export USDC=0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8
|
||||
|
||||
# WETH/USDC Pool address
|
||||
export WETHUSDC=0xc31e54c7a869b9fcbecc14363cf510d1c41fa443
|
||||
|
||||
source bin/shmockenv
|
||||
76
bin/shmockenv
Executable file
76
bin/shmockenv
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/bin/bash
|
||||
|
||||
RPC=${RPC_URL:-http://localhost:8545}
|
||||
|
||||
c() {
|
||||
# echo cast "$1" --rpc-url $RPC "${@:2}" >&2
|
||||
cast "$1" --rpc-url "$RPC" "${@:2}"
|
||||
}
|
||||
|
||||
CHAINID=$(c chain-id)
|
||||
|
||||
FILE_TAG=${TAG:-mock}
|
||||
|
||||
# find script directory
|
||||
SOURCE=${BASH_SOURCE[0]}
|
||||
while [ -L "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||
DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )
|
||||
SOURCE=$(readlink "$SOURCE")
|
||||
[[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
done
|
||||
DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )/..
|
||||
|
||||
|
||||
if [ "$FILE_TAG" == "mock" ]; then
|
||||
BROADCAST=$DIR/broadcast
|
||||
FILE_TAG=latest
|
||||
else
|
||||
BROADCAST=$DIR/deployment/$TAG/broadcast
|
||||
fi
|
||||
|
||||
MOCKENV=$(jq -r '.transactions[] | select(.contractName=="MockEnv") | select(.function==null).contractAddress' "$BROADCAST/DeployMock.sol/$CHAINID/run-latest.json" | cast to-check-sum-address) || echo WARNING no MockEnv detected
|
||||
export MOCKENV
|
||||
MIRRORENV=$(jq -r '.transactions[] | select(.contractName=="MirrorEnv") | select(.function==null).contractAddress' "$BROADCAST/DeployMirror.sol/$CHAINID/run-latest.json" | cast to-check-sum-address) || echo WARNING no MirrorEnv detected
|
||||
export MIRRORENV
|
||||
FACTORY=$(jq -r '.transactions[] | select(.contractName=="VaultFactory") | select(.function==null).contractAddress' "$BROADCAST/Deploy.sol/$CHAINID/run-latest.json" | cast to-check-sum-address) || exit 1
|
||||
export FACTORY
|
||||
HELPER=$(jq -r '.transactions[] | select(.contractName=="QueryHelper") | select(.function==null).contractAddress' "$BROADCAST/Deploy.sol/$CHAINID/run-latest.json" | cast to-check-sum-address) || exit 1
|
||||
export HELPER
|
||||
DEXORDER=$(jq -r '.transactions[] | select(.contractName=="Dexorder") | select(.function==null).contractAddress' "$BROADCAST/Deploy.sol/$CHAINID/run-latest.json" | cast to-check-sum-address) || exit 1
|
||||
export DEXORDER
|
||||
|
||||
VAULT_INIT_CODE_HASH=$("$DIR/bin/vault-init-code-hash") || exit 1
|
||||
export VAULT_INIT_CODE_HASH
|
||||
|
||||
POOL=$(c call $MOCKENV "pool()" | cast parse-bytes32-address) || exit 1
|
||||
export POOL
|
||||
MEH=$(c call $MOCKENV "COIN()" | cast parse-bytes32-address) || exit 1
|
||||
export MEH
|
||||
USXD=$(c call $MOCKENV "USD()" | cast parse-bytes32-address) || exit 1
|
||||
export USXD
|
||||
MOCK=$MEH
|
||||
export MOCK
|
||||
USD=$USDX
|
||||
export USD
|
||||
TOKEN0=$(c call $MOCKENV "token0()" | cast parse-bytes32-address) || exit 1
|
||||
export TOKEN0
|
||||
TOKEN1=$(c call $MOCKENV "token1()" | cast parse-bytes32-address) || exit 1
|
||||
export TOKEN1
|
||||
T0DEC=$(c call $TOKEN0 "decimals()" | cast to-dec) || exit 1
|
||||
export T0DEC
|
||||
T1DEC=$(c call $TOKEN1 "decimals()" | cast to-dec) || exit 1
|
||||
export T1DEC
|
||||
POOLDEC=$(echo $T1DEC - $T0DEC | bc)
|
||||
export POOLDEC
|
||||
MEH_INT=$(cast to-dec $MEH)
|
||||
USXD_INT=$(cast to-dec $USXD)
|
||||
#echo $MEH_INT $USXD_INT
|
||||
INVERTED=$(echo $MEH_INT '>' $USXD_INT | bc)
|
||||
export INVERTED
|
||||
|
||||
echo "\$MOCKENV $MOCKENV"
|
||||
echo "\$MIRRORENV $MIRRORENV"
|
||||
echo "\$MEH $MEH"
|
||||
echo "\$USXD $USXD"
|
||||
echo "\$INVERTED $INVERTED"
|
||||
echo "\$POOL $POOL"
|
||||
3
bin/test
Executable file
3
bin/test
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
bin/build
|
||||
forge test -vvvv --fork-url arbitrum_test "$@"
|
||||
7
bin/upgrade
Executable file
7
bin/upgrade
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# the FACTORY env var must also be defined
|
||||
PRIVKEY=${PRIVATE_KEY:='0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'}
|
||||
RPC=${RPC_URL:-http://localhost:8545}
|
||||
|
||||
forge script script/Upgrade.sol -vvvv --fork-url "$RPC" --broadcast --private-key $PRIVKEY
|
||||
14
bin/vault-init-code-hash
Executable file
14
bin/vault-init-code-hash
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# find script directory
|
||||
SOURCE=${BASH_SOURCE[0]}
|
||||
while [ -L "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
|
||||
DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )
|
||||
SOURCE=$(readlink "$SOURCE")
|
||||
[[ $SOURCE != /* ]] && SOURCE=$DIR/$SOURCE # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
|
||||
done
|
||||
DIR=$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )/..
|
||||
|
||||
VAULT_INIT_CODE_HASH=$(cast keccak "$(jq -r .bytecode.object < $DIR/out/Vault.sol/Vault.json)")
|
||||
export VAULT_INIT_CODE_HASH
|
||||
echo $VAULT_INIT_CODE_HASH
|
||||
Reference in New Issue
Block a user