Skip to content

Commit

Permalink
feat: implement rollup module (#1034)
Browse files Browse the repository at this point in the history
* feat: implement rollup module

* feat: add demo script

* chore: fix lint error

* chore: comment out

* fix: apply review

* fix: remove max_sequencers field
  • Loading branch information
shiki-tak authored Jul 27, 2023
1 parent 16d3558 commit 2e0d91f
Show file tree
Hide file tree
Showing 42 changed files with 9,847 additions and 0 deletions.
540 changes: 540 additions & 0 deletions docs/core/proto-docs.md

Large diffs are not rendered by default.

15 changes: 15 additions & 0 deletions proto/finschia/or/rollup/v1/genesis.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
syntax = "proto3";
package finschia.or.rollup.v1;

import "gogoproto/gogo.proto";

import "finschia/or/rollup/v1/rollup.proto";
import "finschia/or/rollup/v1/params.proto";

option go_package = "github.com/Finschia/finschia-sdk/x/or/rollup/types";

message GenesisState {
repeated Rollup rollup_list = 1 [(gogoproto.nullable) = false];
repeated Sequencer sequencer_list = 2 [(gogoproto.nullable) = false];
Params params = 3 [(gogoproto.nullable) = false];
}
12 changes: 12 additions & 0 deletions proto/finschia/or/rollup/v1/params.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
syntax = "proto3";
package finschia.or.rollup.v1;

import "gogoproto/gogo.proto";

option go_package = "github.com/Finschia/finschia-sdk/x/or/rollup/types";

// Params defines the parameters for the module.
message Params {
option (gogoproto.goproto_stringer) = false;

}
78 changes: 78 additions & 0 deletions proto/finschia/or/rollup/v1/query.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
syntax = "proto3";
package finschia.or.rollup.v1;

import "google/api/annotations.proto";

import "finschia/or/rollup/v1/rollup.proto";

import "cosmos/base/query/v1beta1/pagination.proto";
import "cosmos_proto/cosmos.proto";
import "google/protobuf/any.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/Finschia/finschia-sdk/x/or/rollup/types";

service Query {
rpc Rollup(QueryRollupRequest) returns (QueryRollupResponse) {
option (google.api.http).get = "/finschia/or/rollup/v1/rollup/{rollup_name}";
}

rpc AllRollup(QueryAllRollupRequest) returns (QueryAllRollupResponse) {
option (google.api.http).get = "/finschia/or/rollup/v1/rollup/rollup";
}

rpc Sequencer(QuerySequencerRequest) returns (QuerySequencerResponse) {
option (google.api.http).get = "/finschia/or/rollup/v1/rollup/sequencer/{sequencer_address}";
}

rpc SequencersByRollup(QuerySequencersByRollupRequest) returns (QuerySequencersByRollupResponse) {
option (google.api.http).get = "/finschia/or/rollup/v1/rollup/sequencers_by_rollup/{rollup_name}";
}

rpc Deposit(QueryDepositRequest) returns (QueryDepositResponse) {
option (google.api.http).get = "/finschia/or/rollup/v1/rollup/deposit/{rollup_name}/{sequencer_address}";
}
}

message QueryRollupRequest {
string rollup_name = 1;
}

message QueryAllRollupRequest {
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

message QueryAllRollupResponse {
repeated Rollup rollup = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

message QuerySequencerRequest {
string sequencer_address = 1;
}

message QueryRollupResponse {
Rollup rollup = 1 [(gogoproto.nullable) = false];
}

message QuerySequencerResponse {
Sequencer sequencer = 1 [(gogoproto.nullable) = false];
}

message QuerySequencersByRollupRequest {
string rollup_name = 1;
}

message QuerySequencersByRollupResponse {
string rollup_name = 1;
repeated Sequencer sequencer_list = 2 [(gogoproto.nullable) = false];
}

message QueryDepositRequest {
string rollup_name = 1;
string sequencer_address = 2;
}

message QueryDepositResponse {
Deposit deposit = 1;
}
36 changes: 36 additions & 0 deletions proto/finschia/or/rollup/v1/rollup.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
syntax = "proto3";
package finschia.or.rollup.v1;

import "cosmos_proto/cosmos.proto";
import "google/protobuf/any.proto";
import "cosmos/base/v1beta1/coin.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/Finschia/finschia-sdk/x/or/rollup/types";

message Rollup {
string rollup_name = 1;
string creator = 2;
Sequencers permissioned_addresses = 3 [(gogoproto.nullable) = false];
}

message Sequencer {
string sequencer_address = 1;
google.protobuf.Any pubkey = 2 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"];
string rollup_name = 3;
}

message Deposit {
string rollup_name = 1;
string sequencer_address = 2;
cosmos.base.v1beta1.Coin value = 3 [(gogoproto.nullable) = false];
}

message SequencersByRollup {
string rollup_name = 1;
repeated Sequencer sequencers = 2 [(gogoproto.nullable) = false];
}

message Sequencers {
repeated string addresses = 1;
}
55 changes: 55 additions & 0 deletions proto/finschia/or/rollup/v1/tx.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
syntax = "proto3";
package finschia.or.rollup.v1;

import "cosmos_proto/cosmos.proto";
import "google/protobuf/any.proto";
import "gogoproto/gogo.proto";
import "cosmos/base/v1beta1/coin.proto";
import "finschia/or/rollup/v1/rollup.proto";

option go_package = "github.com/Finschia/finschia-sdk/x/or/rollup/types";

service Msg {
rpc CreateRollup(MsgCreateRollup) returns (MsgCreateRollupResponse);
rpc RegisterSequencer(MsgRegisterSequencer) returns (MsgRegisterSequencerResponse);
rpc Deposit(MsgDeposit) returns (MsgDepositResponse);
rpc Withdraw(MsgWithdraw) returns (MsgWithdrawResponse);
rpc RemoveSequencer(MsgRemoveSequencer) returns (MsgRemoveSequencerResponse);
}

message MsgCreateRollup {
string rollup_name = 1;
string creator = 2;
Sequencers permissioned_addresses = 3 [(gogoproto.nullable) = false];
}

message MsgRegisterSequencer {
string creator = 1;
google.protobuf.Any pubkey = 2 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"];
string rollup_name = 3;
cosmos.base.v1beta1.Coin value = 4 [(gogoproto.nullable) = false];
}

message MsgDeposit {
string rollup_name = 1;
string sequencer_address = 2;
cosmos.base.v1beta1.Coin value = 3 [(gogoproto.nullable) = false];
}

message MsgWithdraw {
string rollup_name = 1;
string sequencer_address = 2;
cosmos.base.v1beta1.Coin value = 3 [(gogoproto.nullable) = false];
}

message MsgCreateRollupResponse {}

message MsgRegisterSequencerResponse {}

message MsgRemoveSequencer {}

message MsgRemoveSequencerResponse {}

message MsgDepositResponse {}

message MsgWithdrawResponse {}
16 changes: 16 additions & 0 deletions simapp/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@ import (
upgradekeeper "github.com/Finschia/finschia-sdk/x/upgrade/keeper"
upgradetypes "github.com/Finschia/finschia-sdk/x/upgrade/types"

"github.com/Finschia/finschia-sdk/x/or/rollup"
rollupkeeper "github.com/Finschia/finschia-sdk/x/or/rollup/keeper"
rolluptypes "github.com/Finschia/finschia-sdk/x/or/rollup/types"

// unnamed import of statik for swagger UI support
_ "github.com/Finschia/finschia-sdk/client/docs/statik"
)
Expand Down Expand Up @@ -144,6 +148,7 @@ var (
vesting.AppModuleBasic{},
tokenmodule.AppModuleBasic{},
collectionmodule.AppModuleBasic{},
rollup.AppModuleBasic{},
//ordamodule.AppModuleBasic{},
)

Expand All @@ -157,6 +162,7 @@ var (
stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking},
stakingtypes.NotBondedPoolName: {authtypes.Burner, authtypes.Staking},
govtypes.ModuleName: {authtypes.Burner},
rolluptypes.ModuleName: {authtypes.Burner},
}

// module accounts that are allowed to receive tokens
Expand Down Expand Up @@ -206,6 +212,8 @@ type SimApp struct {
CollectionKeeper collectionkeeper.Keeper
Ordakeeper ordakeeper.Keeper

RollupKeeper rollupkeeper.Keeper

// the module manager
mm *module.Manager

Expand Down Expand Up @@ -258,6 +266,7 @@ func NewSimApp(
token.StoreKey,
collection.StoreKey,
authzkeeper.StoreKey,
rolluptypes.StoreKey,
ordatypes.StoreKey,
)
tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
Expand Down Expand Up @@ -362,6 +371,7 @@ func NewSimApp(
app.EvidenceKeeper = *evidenceKeeper

/**** Rollup ****/
app.RollupKeeper = rollupkeeper.NewKeeper(appCodec, app.BankKeeper, app.AccountKeeper, keys[rolluptypes.StoreKey], keys[rolluptypes.MemStoreKey], app.GetSubspace(rolluptypes.ModuleName))
app.Ordakeeper = ordakeeper.NewKeeper(appCodec, keys[ordatypes.StoreKey], authtypes.NewModuleAddress(govtypes.ModuleName).String(), app.AccountKeeper, nil)

/**** Module Options ****/
Expand Down Expand Up @@ -395,6 +405,7 @@ func NewSimApp(
tokenmodule.NewAppModule(appCodec, app.TokenKeeper),
collectionmodule.NewAppModule(appCodec, app.CollectionKeeper),
authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
rollup.NewAppModule(appCodec, app.RollupKeeper, app.AccountKeeper, app.BankKeeper),
//ordamodule.NewAppModule(appCodec, app.Ordakeeper, app.AccountKeeper),
)

Expand Down Expand Up @@ -423,6 +434,7 @@ func NewSimApp(
vestingtypes.ModuleName,
token.ModuleName,
collection.ModuleName,
rolluptypes.ModuleName,
ordatypes.ModuleName,
)
app.mm.SetOrderEndBlockers(
Expand All @@ -445,6 +457,7 @@ func NewSimApp(
foundation.ModuleName,
token.ModuleName,
collection.ModuleName,
rolluptypes.ModuleName,
ordatypes.ModuleName,
)

Expand Down Expand Up @@ -473,6 +486,7 @@ func NewSimApp(
vestingtypes.ModuleName,
token.ModuleName,
collection.ModuleName,
rolluptypes.ModuleName,
ordatypes.ModuleName,
)

Expand Down Expand Up @@ -725,5 +739,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
paramsKeeper.Subspace(crisistypes.ModuleName)

paramsKeeper.Subspace(rolluptypes.ModuleName)

return paramsKeeper
}
87 changes: 87 additions & 0 deletions x/or/demo/prepare_rollup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#!/bin/bash

#
DENOM="stake"
ROLLUPNAME="test-rollup"
DEPOSIT="20"
WITHDRAW="10"

BASE_DIR=~/.simapp

# Get address which want to register for sequencer
SEQUENCER=$(simd keys list --keyring-backend=test --home $BASE_DIR --output json | jq -r '.[0]'.name)
SEQUENCERADDRESS=$(simd keys list --keyring-backend=test --home $BASE_DIR --output json | jq -r '.[0]'.address)
SEQUENCERPUBKEY=$(simd keys list --keyring-backend=test --home $BASE_DIR --output json | jq -r '.[0]'.pubkey)
echo "Sequencer Info"
echo $SEQUENCER
echo $SEQUENCERADDRESS
echo $SEQUENCERPUBKEY

echo "# Check init balance"
INITBALANCE=$(simd query bank balances $SEQUENCERADDRESS --home $BASE_DIR --output json | jq -r '.balances[0].amount')
echo $INITBALANCE

echo "# Create rollup"
simd tx rollup create-rollup $ROLLUPNAME --from $SEQUENCER --keyring-backend=test --home $BASE_DIR --chain-id sim -y

sleep 5

echo "# Check created rollup"
simd query rollup show-rollup $ROLLUPNAME

echo "# Check rollup list"
simd query rollup list

echo "# Register sequencer"
simd tx rollup register-sequencer test-rollup ${SEQUENCERPUBKEY} $DEPOSIT$DENOM --from $SEQUENCER --keyring-backend test --home $BASE_DIR --chain-id sim -y

sleep 5

echo "# Check balance after registered sequencer"
BALANCEAFTERREGISTER=$(simd query bank balances $SEQUENCERADDRESS --home $BASE_DIR --output json | jq -r '.balances[0].amount')
echo $BALANCEAFTERREGISTER

if [ $((${INITBALANCE}-${DEPOSIT})) -ne ${BALANCEAFTERREGISTER} ]; then
echo "The balance after registering the sequencer does not match."
exit 1
else
echo "Register sequencer done"
fi

echo "# Check sequencer by rollup name"
simd query rollup show-sequencers-by-rollup $ROLLUPNAME --output json

echo "# Check sequencer"
simd query rollup show-sequencer $SEQUENCERADDRESS --home $BASE_DIR --output json

echo "# Withdraw deposit"
simd tx rollup withdraw-by-sequencer $ROLLUPNAME $WITHDRAW$DENOM --from $SEQUENCER --keyring-backend test --home $BASE_DIR --chain-id sim -y

sleep 5

echo "# Check balance after withdraw"
BALANCEAFTERWITHDRAW=$(simd query bank balances $SEQUENCERADDRESS --home $BASE_DIR --output json | jq -r '.balances[0].amount')

if [ $((${INITBALANCE}-${DEPOSIT}+${WITHDRAW})) -ne ${BALANCEAFTERWITHDRAW} ]; then
echo "The balance after withdraw does not match."
exit 1
else
echo "Withdraw done"
fi

echo "# Deposit by sequencer again"
simd tx rollup deposit-by-sequencer test-rollup $DEPOSIT$DENOM --from $SEQUENCER --keyring-backend=test --home $BASE_DIR --chain-id sim -y

sleep 5

echo "# Check balance after deposit again"
BALANCEAFTERDEPOSITAGAIN=$(simd query bank balances $SEQUENCERADDRESS --home $BASE_DIR --output json | jq -r '.balances[0].amount')

if [ $((${INITBALANCE}-2*${DEPOSIT}+${WITHDRAW})) -ne ${BALANCEAFTERDEPOSITAGAIN} ]; then
echo "The balance after deposit again does not match."
exit 1
else
echo "Deposit again done"
fi

echo "Prepare rollup all done."
Loading

0 comments on commit 2e0d91f

Please sign in to comment.