This commit is contained in:
dexorder
2024-10-17 02:42:28 -04:00
commit 25def69c66
878 changed files with 112489 additions and 0 deletions

48
bin/build Executable file
View 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
View 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
View File

@@ -0,0 +1,3 @@
#!/bin/bash
#./bin/build
forge test --gas-report --fork-url arbitrum_test --mc 'TestExecute' "$@"

33
bin/getprice Executable file
View 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
View 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
View 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
View 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
View 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
View 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
View File

@@ -0,0 +1,3 @@
#!/bin/bash
bin/build
forge test -vvvv --fork-url arbitrum_test "$@"

7
bin/upgrade Executable file
View 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
View 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