Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 63 additions & 92 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,11 @@ jobs:
test-examples:
name: Test Examples
runs-on: ubuntu-latest
env:
ganache-image: trufflesuite/ganache:v7.9.1

steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: '1.23'
go-version: "1.23"
- uses: actions/cache@v3
with:
path: |
Expand All @@ -33,42 +30,34 @@ jobs:
chmod +x ./testdata/docker/build.sh
./testdata/docker/build.sh

- name: Pull ganache-cli image
run: docker pull ${{ env.ganache-image }}

- name: Payment Channel ETH
working-directory: payment-channel
env:
KEY_DEPLOYER: "0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e"
KEY_ALICE: "0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f"
KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e"
BALANCE: "10000000000000000000"
run: |
docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE --b=5
docker build -t payment-channel-hardhat .
docker run --rm --name payment-channel-hardhat \
-d -p 8545:8545 \
payment-channel-hardhat


sleep 5
go run .
docker stop ganache
docker stop payment-channel-hardhat

- name: Multiledger Payment Channel
working-directory: multiledger-channel
env:
KEY_DEPLOYER: "0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e"
KEY_ALICE: "0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f"
KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e"
BALANCE: "10000000000000000000"
CHAIN_A_PORT: "8545"
CHAIN_B_PORT: "8546"
CHAIN_A_ID: "1337"
CHAIN_B_ID: "1338"
run: |
docker run --rm --name ganache-a --detach --publish $CHAIN_A_PORT:$CHAIN_A_PORT ${{ env.ganache-image }} --port $CHAIN_A_PORT --chain.chainId $CHAIN_A_ID --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE --b=1
docker run --rm --name ganache-b --detach --publish $CHAIN_B_PORT:$CHAIN_B_PORT ${{ env.ganache-image }} --port $CHAIN_B_PORT --chain.chainId $CHAIN_B_ID --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE --b=1
docker build -t hardhat-chain1 -f chain1/Dockerfile chain1
docker build -t hardhat-chain2 -f chain2/Dockerfile chain2

docker run --rm --name hardhat-chain1 -d -p 8545:8545 hardhat-chain1
docker run --rm --name hardhat-chain2 -d -p 8546:8545 hardhat-chain2

sleep 5
go run .
docker stop ganache-a
docker stop ganache-b


docker stop hardhat-chain1
docker stop hardhat-chain2

- name: App Channel
working-directory: app-channel
run: |
Expand All @@ -81,7 +70,7 @@ jobs:
sleep 5
go run .
docker stop appchannel-devnet

- name: Install contract dependencies
run: |
sudo apt-get update
Expand Down Expand Up @@ -114,10 +103,6 @@ jobs:
- name: Payment Channel CKB-ETH
working-directory: payment-channel-ckb-eth
env:
KEY_DEPLOYER: "0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e"
KEY_ALICE: "0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f"
KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e"
BALANCE: "10000000000000000000"
RUSTFLAGS: "-C linker=rust-lld"
CARGO_TARGET_RISCV64IMAC_UNKNOWN_NONE_ELF_LINKER: rust-lld
CC_riscv64imac_unknown_none_elf: riscv64-unknown-elf-gcc
Expand All @@ -126,9 +111,9 @@ jobs:
CFLAGS: "-I/usr/riscv64-linux-gnu/include"
TARGET_CFLAGS: "-I/usr/riscv64-linux-gnu/include"
run: |
docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE --b=5
docker build -t eth-devnet .
docker run --rm --name eth-devnet -d -p 8545:8545 eth-devnet

sleep 5
sudo apt-get update
sudo apt-get install -y \
jq sed gawk tmux tmuxp expect make \
Expand Down Expand Up @@ -163,9 +148,9 @@ jobs:
cd ..
unset C_INCLUDE_PATH CFLAGS TARGET_CFLAGS
unset CC_riscv64imac_unknown_none_elf AR_riscv64imac_unknown_none_elf

go run main.go
docker stop ganache
docker stop eth-devnet
sudo pkill -x ckb || true
sudo pkill -f offckb || true
sleep 1
Expand All @@ -176,7 +161,7 @@ jobs:
working-directory: payment-channel-xlm
run: |
docker stop stellar soroban-preview || true

sleep 5
chmod +x ./testdata/docker/build.sh
./testdata/docker/build.sh
Expand All @@ -186,27 +171,25 @@ jobs:

sleep 50
go run ./
docker stop stellar
docker stop stellar

- name: Payment Channel Cross-Contract
working-directory: payment-channel-cc
env:
KEY_DEPLOYER: "0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e"
KEY_ALICE: "0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f"
KEY_BOB: "0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e"
BALANCE: "10000000000000000000"
run: |
docker run --rm --name ganache --detach --publish 8545:8545 ${{ env.ganache-image }} --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE --b=5
cd hardhat
docker build -t eth-devnet .
docker run --rm --name eth-devnet -d -p 8545:8545 eth-devnet
cd ..

chmod +x ./testdata/docker/build.sh
./testdata/docker/build.sh

chmod +x ./quickstart.sh
./quickstart.sh standalone &

sleep 50
go run .
docker stop ganache
docker stop eth-devnet
docker stop stellar

- name: Payment Channel ICP
Expand All @@ -232,19 +215,7 @@ jobs:
go run .
docker stop polkadot


- name: Install CKB contract dependencies
run: |
sudo apt-get update
sudo apt-get install -y gcc-riscv64-unknown-elf binutils-riscv64-unknown-elf libc6-dev-riscv64-cross libc6-riscv64-cross linux-libc-dev-riscv64-cross
wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && sudo ./llvm.sh 18 && rm llvm.sh
cargo install cargo-generate
rustup target add riscv64imac-unknown-none-elf

- name: Create Symlink
run: sudo ln -s /usr/riscv64-linux-gnu/include/gnu/stubs-lp64d.h /usr/riscv64-linux-gnu/include/gnu/stubs-lp64.h

- name: Start devnet in background
- name: Start CKB devnet in background
working-directory: payment-channel-ckb
env:
RUSTFLAGS: "-C linker=rust-lld"
Expand All @@ -255,36 +226,36 @@ jobs:
CFLAGS: "-I/usr/riscv64-linux-gnu/include"
TARGET_CFLAGS: "-I/usr/riscv64-linux-gnu/include"
run: |
sudo apt-get update
sudo apt-get install -y jq sed gawk tmux tmuxp expect make
curl -LO https://github.com/nervosnetwork/ckb/releases/download/v0.201.0/ckb_v0.201.0_x86_64-unknown-linux-gnu.tar.gz
tar -xzf ckb_v0.201.0_x86_64-unknown-linux-gnu.tar.gz
sudo cp ckb_v0.201.0_x86_64-unknown-linux-gnu/ckb /usr/local/bin/
curl -LO https://github.com/nervosnetwork/ckb-cli/releases/download/v1.4.0/ckb-cli_v1.4.0_x86_64-unknown-linux-gnu.tar.gz
curl -LO https://github.com/nervosnetwork/ckb-cli/releases/download/v1.13.0/ckb-cli_v1.13.0_x86_64-unknown-linux-gnu.tar.gz
tar -xzf ckb-cli_v1.13.0_x86_64-unknown-linux-gnu.tar.gz
sudo cp ckb-cli_v1.13.0_x86_64-unknown-linux-gnu/ckb-cli /usr/local/bin/
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
sudo dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb

git submodule update --init --recursive
cd ./devnet
chmod +x setup-devnet.sh print_accounts.sh deploy_contracts.sh sudt_helper.sh
./setup-devnet.sh
ckb run > /dev/null 2>&1 &
sleep 3
ckb miner > /dev/null 2>&1 &
sleep 3
./print_accounts.sh
sleep 6
expect fund_accounts.expect
sleep 10
./deploy_contracts.sh
sleep 15
./sudt_helper.sh fund
sleep 10
./sudt_helper.sh balances
cd ../..
sudo apt-get update
sudo apt-get install -y jq sed gawk tmux tmuxp expect make
curl -LO https://github.com/nervosnetwork/ckb/releases/download/v0.201.0/ckb_v0.201.0_x86_64-unknown-linux-gnu.tar.gz
tar -xzf ckb_v0.201.0_x86_64-unknown-linux-gnu.tar.gz
sudo cp ckb_v0.201.0_x86_64-unknown-linux-gnu/ckb /usr/local/bin/
curl -LO https://github.com/nervosnetwork/ckb-cli/releases/download/v1.4.0/ckb-cli_v1.4.0_x86_64-unknown-linux-gnu.tar.gz
curl -LO https://github.com/nervosnetwork/ckb-cli/releases/download/v1.13.0/ckb-cli_v1.13.0_x86_64-unknown-linux-gnu.tar.gz
tar -xzf ckb-cli_v1.13.0_x86_64-unknown-linux-gnu.tar.gz
sudo cp ckb-cli_v1.13.0_x86_64-unknown-linux-gnu/ckb-cli /usr/local/bin/
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.0g-2ubuntu4_amd64.deb
sudo dpkg -i libssl1.1_1.1.0g-2ubuntu4_amd64.deb

git submodule update --init --recursive
cd ./devnet
chmod +x setup-devnet.sh print_accounts.sh deploy_contracts.sh sudt_helper.sh
./setup-devnet.sh
ckb run > /dev/null 2>&1 &
sleep 3
ckb miner > /dev/null 2>&1 &
sleep 3
./print_accounts.sh
sleep 6
expect fund_accounts.expect
sleep 10
./deploy_contracts.sh
sleep 15
./sudt_helper.sh fund
sleep 10
./sudt_helper.sh balances
cd ../..
- name: Payment Channel CKB
working-directory: payment-channel-ckb
run: |
Expand Down
48 changes: 42 additions & 6 deletions app-channel/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,51 @@
# app-channel
## Requirements
- Node.js 20.x or higher
- npm or yarn
- Hardhat 2.22.x

Install [ganache-cli](https://github.com/trufflesuite/ganache-cli) and run
## Setup
Install dependencies:
```sh
KEY_DEPLOYER=0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e
KEY_ALICE=0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f
KEY_BOB=0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e
BALANCE=10000000000000000000
npm install
```

or
```sh
yarn add --dev hardhat
```


ganache --h 127.0.0.1 --port 8545 --wallet.accounts $KEY_DEPLOYER,$BALANCE $KEY_ALICE,$BALANCE $KEY_BOB,$BALANCE -b 5
## Running the Ethereum Testnet

### Using Hardhat (Recommended)
Run the Hardhat node with pre-configured accounts:
```sh
npx hardhat node
```

This will start a local Ethereum node on http://127.0.0.1:8545 with the following accounts:

- Deployer: `0x79ea8f62d97bc0591a4224c1725fca6b00de5b2cea286fe2e0bb35c5e76be46e` (10 ETH)

- Alice: `0x1af2e950272dd403de7a5760d41c6e44d92b6d02797e51810795ff03cc2cda4f` (10 ETH)

- Bob: `0xf63d7d8e930bccd74e93cf5662fde2c28fd8be95edb70c73f1bdd863d07f412e` (10 ETH)

The node mines a new block every 5 seconds and runs on chain ID `1337`.



### Using Docker
Build and run the Hardhat node in Docker:
```sh
docker build -t app-channel-node .
docker run -p 8545:8545 app-channel-node
```



## Running the Application
Then run
```
go run .
Expand Down
31 changes: 15 additions & 16 deletions app-channel/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ toolchain go1.23.4
require (
github.com/ethereum/go-ethereum v1.15.11
github.com/perun-network/perun-eth-backend v0.6.0
github.com/perun-network/perun-libp2p-wire v1.0.1
github.com/pkg/errors v0.9.1
perun.network/go-perun v0.13.1-0.20250519120217-973104e7b38a
perun.network/go-perun v0.15.0
)

require (
Expand Down Expand Up @@ -55,7 +54,7 @@ require (
github.com/koron/go-ssdp v0.0.5 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/libp2p/go-flow-metrics v0.2.0 // indirect
github.com/libp2p/go-libp2p v0.41.0 // indirect
github.com/libp2p/go-libp2p v0.41.1 // indirect
github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect
github.com/libp2p/go-msgio v0.3.0 // indirect
github.com/libp2p/go-netroute v0.2.2 // indirect
Expand Down Expand Up @@ -86,14 +85,14 @@ require (
github.com/pion/datachannel v1.5.10 // indirect
github.com/pion/dtls/v2 v2.2.12 // indirect
github.com/pion/dtls/v3 v3.0.4 // indirect
github.com/pion/ice/v4 v4.0.6 // indirect
github.com/pion/ice/v4 v4.0.8 // indirect
github.com/pion/interceptor v0.1.37 // indirect
github.com/pion/logging v0.2.3 // indirect
github.com/pion/mdns/v2 v2.0.7 // indirect
github.com/pion/randutil v0.1.0 // indirect
github.com/pion/rtcp v1.2.15 // indirect
github.com/pion/rtp v1.8.11 // indirect
github.com/pion/sctp v1.8.36 // indirect
github.com/pion/sctp v1.8.37 // indirect
github.com/pion/sdp/v3 v3.0.10 // indirect
github.com/pion/srtp/v3 v3.0.4 // indirect
github.com/pion/stun v0.6.1 // indirect
Expand All @@ -103,12 +102,12 @@ require (
github.com/pion/turn/v4 v4.0.0 // indirect
github.com/pion/webrtc/v4 v4.0.10 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.21.0 // indirect
github.com/prometheus/client_golang v1.21.1 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/quic-go/qpack v0.5.1 // indirect
github.com/quic-go/quic-go v0.50.0 // indirect
github.com/quic-go/quic-go v0.50.1 // indirect
github.com/quic-go/webtransport-go v0.8.1-0.20241018022711-4ac2c9250e66 // indirect
github.com/raulk/go-watchdog v1.3.0 // indirect
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
Expand All @@ -124,15 +123,15 @@ require (
go.uber.org/mock v0.5.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/crypto v0.35.0 // indirect
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect
golang.org/x/mod v0.23.0 // indirect
golang.org/x/net v0.36.0 // indirect
golang.org/x/sync v0.11.0 // indirect
golang.org/x/sys v0.30.0 // indirect
golang.org/x/text v0.22.0 // indirect
golang.org/x/tools v0.30.0 // indirect
google.golang.org/protobuf v1.36.5 // indirect
golang.org/x/crypto v0.37.0 // indirect
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
golang.org/x/mod v0.24.0 // indirect
golang.org/x/net v0.39.0 // indirect
golang.org/x/sync v0.13.0 // indirect
golang.org/x/sys v0.32.0 // indirect
golang.org/x/text v0.24.0 // indirect
golang.org/x/tools v0.32.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.4.0 // indirect
polycry.pt/poly-go v0.0.0-20220301085937-fb9d71b45a37 // indirect
Expand Down
Loading
Loading