mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-04-04 15:55:23 +00:00 
			
		
		
		
	feat: precompile
This commit is contained in:
		
							parent
							
								
									6f2b402294
								
							
						
					
					
						commit
						b53783447b
					
				
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -42,3 +42,7 @@ build/linux | ||||
| go.work | ||||
| go.work.sum | ||||
| .build/0gchaind | ||||
| .build/da | ||||
| 
 | ||||
| # runtime | ||||
| run | ||||
|  | ||||
							
								
								
									
										22
									
								
								app/app.go
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								app/app.go
									
									
									
									
									
								
							| @ -97,7 +97,6 @@ import ( | ||||
| 	"github.com/evmos/ethermint/x/evm" | ||||
| 	evmkeeper "github.com/evmos/ethermint/x/evm/keeper" | ||||
| 	evmtypes "github.com/evmos/ethermint/x/evm/types" | ||||
| 	"github.com/evmos/ethermint/x/evm/vm/geth" | ||||
| 	"github.com/evmos/ethermint/x/feemarket" | ||||
| 	feemarketkeeper "github.com/evmos/ethermint/x/feemarket/keeper" | ||||
| 	feemarkettypes "github.com/evmos/ethermint/x/feemarket/types" | ||||
| @ -111,6 +110,8 @@ import ( | ||||
| 	"github.com/0glabs/0g-chain/app/ante" | ||||
| 	chainparams "github.com/0glabs/0g-chain/app/params" | ||||
| 	"github.com/0glabs/0g-chain/chaincfg" | ||||
| 	dasignersprecompile "github.com/0glabs/0g-chain/precompiles/dasigners" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/x/bep3" | ||||
| 	bep3keeper "github.com/0glabs/0g-chain/x/bep3/keeper" | ||||
| 	bep3types "github.com/0glabs/0g-chain/x/bep3/types" | ||||
| @ -124,6 +125,9 @@ import ( | ||||
| 	das "github.com/0glabs/0g-chain/x/das/v1" | ||||
| 	daskeeper "github.com/0glabs/0g-chain/x/das/v1/keeper" | ||||
| 	dastypes "github.com/0glabs/0g-chain/x/das/v1/types" | ||||
| 	dasigners "github.com/0glabs/0g-chain/x/dasigners/v1" | ||||
| 	dasignerskeeper "github.com/0glabs/0g-chain/x/dasigners/v1/keeper" | ||||
| 	dasignerstypes "github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| 	evmutil "github.com/0glabs/0g-chain/x/evmutil" | ||||
| 	evmutilkeeper "github.com/0glabs/0g-chain/x/evmutil/keeper" | ||||
| 	evmutiltypes "github.com/0glabs/0g-chain/x/evmutil/types" | ||||
| @ -136,6 +140,8 @@ import ( | ||||
| 	validatorvesting "github.com/0glabs/0g-chain/x/validator-vesting" | ||||
| 	validatorvestingrest "github.com/0glabs/0g-chain/x/validator-vesting/client/rest" | ||||
| 	validatorvestingtypes "github.com/0glabs/0g-chain/x/validator-vesting/types" | ||||
| 	"github.com/ethereum/go-ethereum/common" | ||||
| 	"github.com/ethereum/go-ethereum/core/vm" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| @ -179,6 +185,7 @@ var ( | ||||
| 		mint.AppModuleBasic{}, | ||||
| 		council.AppModuleBasic{}, | ||||
| 		das.AppModuleBasic{}, | ||||
| 		dasigners.AppModuleBasic{}, | ||||
| 	) | ||||
| 
 | ||||
| 	// module account permissions
 | ||||
| @ -473,14 +480,23 @@ func NewApp( | ||||
| 	) | ||||
| 
 | ||||
| 	evmBankKeeper := evmutilkeeper.NewEvmBankKeeper(app.evmutilKeeper, app.bankKeeper, app.accountKeeper) | ||||
| 	// dasigners keeper
 | ||||
| 	app.dasignersKeeper = dasignerskeeper.NewKeeper(keys[dasignerstypes.StoreKey], appCodec, app.stakingKeeper) | ||||
| 	// precopmiles
 | ||||
| 	precompiles := make(map[common.Address]vm.PrecompiledContract) | ||||
| 	daSignersPrecompile, err := dasignersprecompile.NewDASignersPrecompile(app.dasignersKeeper) | ||||
| 	if err != nil { | ||||
| 		panic("initialize precompile failed") | ||||
| 	} | ||||
| 	precompiles[daSignersPrecompile.Address()] = daSignersPrecompile | ||||
| 	// evm keeper
 | ||||
| 	app.evmKeeper = evmkeeper.NewKeeper( | ||||
| 		appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], | ||||
| 		govAuthAddr, | ||||
| 		app.accountKeeper, evmBankKeeper, app.stakingKeeper, app.feeMarketKeeper, | ||||
| 		nil, // precompiled contracts
 | ||||
| 		geth.NewEVM, | ||||
| 		options.EVMTrace, | ||||
| 		evmSubspace, | ||||
| 		precompiles, | ||||
| 	) | ||||
| 
 | ||||
| 	app.evmutilKeeper.SetEvmKeeper(app.evmKeeper) | ||||
|  | ||||
| @ -23,6 +23,9 @@ import ( | ||||
| 	evmtypes "github.com/evmos/ethermint/x/evm/types" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	abci "github.com/tendermint/tendermint/abci/types" | ||||
| 	"github.com/tendermint/tendermint/libs/log" | ||||
| 	db "github.com/tendermint/tm-db" | ||||
| ) | ||||
| 
 | ||||
| func TestNewApp(t *testing.T) { | ||||
|  | ||||
							
								
								
									
										166
									
								
								crypto/bn254util/bn254util.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								crypto/bn254util/bn254util.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,166 @@ | ||||
| package bn254util | ||||
| 
 | ||||
| import ( | ||||
| 	"math/big" | ||||
| 
 | ||||
| 	"github.com/consensys/gnark-crypto/ecc/bn254" | ||||
| 	"github.com/consensys/gnark-crypto/ecc/bn254/fp" | ||||
| 	"github.com/consensys/gnark-crypto/ecc/bn254/fr" | ||||
| 	"github.com/ethereum/go-ethereum/crypto" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	G1PointSize = 32 * 2 | ||||
| 	G2PointSize = 32 * 2 * 2 | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	FR_MODULUS, _ = new(big.Int).SetString("21888242871839275222246405745257275088548364400416034343698204186575808495617", 10) | ||||
| ) | ||||
| 
 | ||||
| func VerifySig(sig *bn254.G1Affine, pubkey *bn254.G2Affine, msgBytes [32]byte) (bool, error) { | ||||
| 
 | ||||
| 	g2Gen := GetG2Generator() | ||||
| 
 | ||||
| 	msgPoint := MapToCurve(msgBytes) | ||||
| 
 | ||||
| 	var negSig bn254.G1Affine | ||||
| 	negSig.Neg((*bn254.G1Affine)(sig)) | ||||
| 
 | ||||
| 	P := [2]bn254.G1Affine{*msgPoint, negSig} | ||||
| 	Q := [2]bn254.G2Affine{*pubkey, *g2Gen} | ||||
| 
 | ||||
| 	ok, err := bn254.PairingCheck(P[:], Q[:]) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 	return ok, nil | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func MapToCurve(digest [32]byte) *bn254.G1Affine { | ||||
| 
 | ||||
| 	one := new(big.Int).SetUint64(1) | ||||
| 	three := new(big.Int).SetUint64(3) | ||||
| 	x := new(big.Int) | ||||
| 	x.SetBytes(digest[:]) | ||||
| 	for { | ||||
| 		// y = x^3 + 3
 | ||||
| 		xP3 := new(big.Int).Exp(x, big.NewInt(3), fp.Modulus()) | ||||
| 		y := new(big.Int).Add(xP3, three) | ||||
| 		y.Mod(y, fp.Modulus()) | ||||
| 
 | ||||
| 		if y.ModSqrt(y, fp.Modulus()) == nil { | ||||
| 			x.Add(x, one).Mod(x, fp.Modulus()) | ||||
| 		} else { | ||||
| 			var fpX, fpY fp.Element | ||||
| 			fpX.SetBigInt(x) | ||||
| 			fpY.SetBigInt(y) | ||||
| 			return &bn254.G1Affine{ | ||||
| 				X: fpX, | ||||
| 				Y: fpY, | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func CheckG1AndG2DiscreteLogEquality(pointG1 *bn254.G1Affine, pointG2 *bn254.G2Affine) (bool, error) { | ||||
| 	negGenG1 := new(bn254.G1Affine).Neg(GetG1Generator()) | ||||
| 	return bn254.PairingCheck([]bn254.G1Affine{*pointG1, *negGenG1}, []bn254.G2Affine{*GetG2Generator(), *pointG2}) | ||||
| } | ||||
| 
 | ||||
| func GetG1Generator() *bn254.G1Affine { | ||||
| 	g1Gen := new(bn254.G1Affine) | ||||
| 	_, err := g1Gen.X.SetString("1") | ||||
| 	if err != nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	_, err = g1Gen.Y.SetString("2") | ||||
| 	if err != nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return g1Gen | ||||
| } | ||||
| 
 | ||||
| func GetG2Generator() *bn254.G2Affine { | ||||
| 	g2Gen := new(bn254.G2Affine) | ||||
| 	g2Gen.X.SetString("10857046999023057135944570762232829481370756359578518086990519993285655852781", | ||||
| 		"11559732032986387107991004021392285783925812861821192530917403151452391805634") | ||||
| 	g2Gen.Y.SetString("8495653923123431417604973247489272438418190587263600148770280649306958101930", | ||||
| 		"4082367875863433681332203403145435568316851327593401208105741076214120093531") | ||||
| 	return g2Gen | ||||
| } | ||||
| 
 | ||||
| func MulByGeneratorG1(a *fr.Element) *bn254.G1Affine { | ||||
| 	g1Gen := GetG1Generator() | ||||
| 	return new(bn254.G1Affine).ScalarMultiplication(g1Gen, a.BigInt(new(big.Int))) | ||||
| } | ||||
| 
 | ||||
| func MulByGeneratorG2(a *fr.Element) *bn254.G2Affine { | ||||
| 	g2Gen := GetG2Generator() | ||||
| 	return new(bn254.G2Affine).ScalarMultiplication(g2Gen, a.BigInt(new(big.Int))) | ||||
| } | ||||
| 
 | ||||
| func SerializeG1(p *bn254.G1Affine) []byte { | ||||
| 	b := make([]byte, 0) | ||||
| 	tmp := p.X.Bytes() | ||||
| 	for i := 0; i < 32; i++ { | ||||
| 		b = append(b, tmp[i]) | ||||
| 	} | ||||
| 	tmp = p.Y.Bytes() | ||||
| 	for i := 0; i < 32; i++ { | ||||
| 		b = append(b, tmp[i]) | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
| 
 | ||||
| func DeserializeG1(b []byte) *bn254.G1Affine { | ||||
| 	p := new(bn254.G1Affine) | ||||
| 	p.X.SetBytes(b[0:32]) | ||||
| 	p.Y.SetBytes(b[32:64]) | ||||
| 	return p | ||||
| } | ||||
| 
 | ||||
| func SerializeG2(p *bn254.G2Affine) []byte { | ||||
| 	b := make([]byte, 0) | ||||
| 	tmp := p.X.A0.Bytes() | ||||
| 	for i := 0; i < 32; i++ { | ||||
| 		b = append(b, tmp[i]) | ||||
| 	} | ||||
| 	tmp = p.X.A1.Bytes() | ||||
| 	for i := 0; i < 32; i++ { | ||||
| 		b = append(b, tmp[i]) | ||||
| 	} | ||||
| 	tmp = p.Y.A0.Bytes() | ||||
| 	for i := 0; i < 32; i++ { | ||||
| 		b = append(b, tmp[i]) | ||||
| 	} | ||||
| 	tmp = p.Y.A1.Bytes() | ||||
| 	for i := 0; i < 32; i++ { | ||||
| 		b = append(b, tmp[i]) | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
| 
 | ||||
| func DeserializeG2(b []byte) *bn254.G2Affine { | ||||
| 	p := new(bn254.G2Affine) | ||||
| 	p.X.A0.SetBytes(b[0:32]) | ||||
| 	p.X.A1.SetBytes(b[32:64]) | ||||
| 	p.Y.A0.SetBytes(b[64:96]) | ||||
| 	p.Y.A1.SetBytes(b[96:128]) | ||||
| 	return p | ||||
| } | ||||
| 
 | ||||
| func Gamma(hash *bn254.G1Affine, signature *bn254.G1Affine, pkG1 *bn254.G1Affine, pkG2 *bn254.G2Affine) *big.Int { | ||||
| 	toHash := make([]byte, 0) | ||||
| 	toHash = append(toHash, SerializeG1(hash)...) | ||||
| 	toHash = append(toHash, SerializeG1(signature)...) | ||||
| 	toHash = append(toHash, SerializeG1(pkG1)...) | ||||
| 	toHash = append(toHash, SerializeG2(pkG2)...) | ||||
| 
 | ||||
| 	msgHash := crypto.Keccak256(toHash) | ||||
| 	gamma := new(big.Int) | ||||
| 	gamma.SetBytes(msgHash) | ||||
| 	gamma.Mod(gamma, FR_MODULUS) | ||||
| 	return gamma | ||||
| } | ||||
							
								
								
									
										91
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								go.mod
									
									
									
									
									
								
							| @ -2,6 +2,8 @@ module github.com/0glabs/0g-chain | ||||
| 
 | ||||
| go 1.21 | ||||
| 
 | ||||
| toolchain go1.21.5 | ||||
| 
 | ||||
| require ( | ||||
| 	cosmossdk.io/errors v1.0.1 | ||||
| 	cosmossdk.io/math v1.3.0 | ||||
| @ -10,6 +12,7 @@ require ( | ||||
| 	github.com/cometbft/cometbft v0.37.4 | ||||
| 	github.com/cometbft/cometbft-db v0.9.1 | ||||
| 	github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 | ||||
| 	github.com/consensys/gnark-crypto v0.12.1 | ||||
| 	github.com/cosmos/cosmos-proto v1.0.0-beta.3 | ||||
| 	github.com/cosmos/cosmos-sdk v0.47.7 | ||||
| 	github.com/cosmos/go-bip39 v1.0.0 | ||||
| @ -24,27 +27,28 @@ require ( | ||||
| 	github.com/gorilla/mux v1.8.0 | ||||
| 	github.com/grpc-ecosystem/grpc-gateway v1.16.0 | ||||
| 	github.com/linxGnu/grocksdb v1.8.6 | ||||
| 	github.com/pelletier/go-toml/v2 v2.0.8 | ||||
| 	github.com/prometheus/client_golang v1.14.0 | ||||
| 	github.com/spf13/cast v1.5.1 | ||||
| 	github.com/spf13/cobra v1.7.0 | ||||
| 	github.com/spf13/viper v1.16.0 | ||||
| 	github.com/stretchr/testify v1.8.4 | ||||
| 	github.com/subosito/gotenv v1.4.2 | ||||
| 	golang.org/x/crypto v0.16.0 | ||||
| 	golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 | ||||
| 	google.golang.org/grpc v1.60.1 | ||||
| 	google.golang.org/protobuf v1.32.0 | ||||
| 	sigs.k8s.io/yaml v1.4.0 | ||||
| 	google.golang.org/grpc v1.59.0 | ||||
| 	github.com/pelletier/go-toml/v2 v2.1.0 | ||||
| 	github.com/spf13/cast v1.6.0 | ||||
| 	github.com/spf13/cobra v1.8.0 | ||||
| 	github.com/spf13/viper v1.18.1 | ||||
| 	github.com/subosito/gotenv v1.6.0 | ||||
| 	github.com/tendermint/tendermint v0.34.27 | ||||
| 	github.com/tendermint/tm-db v0.6.7 | ||||
| 	golang.org/x/crypto v0.21.0 | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 | ||||
| 	google.golang.org/grpc v1.60.0 | ||||
| 	google.golang.org/protobuf v1.31.0 | ||||
| 	sigs.k8s.io/yaml v1.3.0 | ||||
| ) | ||||
| 
 | ||||
| require ( | ||||
| 	cloud.google.com/go v0.111.0 // indirect | ||||
| 	cloud.google.com/go v0.110.10 // indirect | ||||
| 	cloud.google.com/go/compute v1.23.3 // indirect | ||||
| 	cloud.google.com/go/compute/metadata v0.2.3 // indirect | ||||
| 	cloud.google.com/go/iam v1.1.5 // indirect | ||||
| 	cloud.google.com/go/storage v1.30.1 // indirect | ||||
| 	cosmossdk.io/api v0.3.1 // indirect | ||||
| 	cosmossdk.io/core v0.6.1 // indirect | ||||
| 	cosmossdk.io/depinject v1.0.0-alpha.4 // indirect | ||||
| @ -54,6 +58,10 @@ require ( | ||||
| 	github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect | ||||
| 	github.com/99designs/keyring v1.2.1 // indirect | ||||
| 	github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect | ||||
| 	cloud.google.com/go/iam v1.1.5 // indirect | ||||
| 	cloud.google.com/go/storage v1.35.1 // indirect | ||||
| 	github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect | ||||
| 	github.com/Microsoft/go-winio v0.6.1 // indirect | ||||
| 	github.com/StackExchange/wmi v1.2.1 // indirect | ||||
| 	github.com/VictoriaMetrics/fastcache v1.6.0 // indirect | ||||
| 	github.com/allegro/bigcache v1.2.1 // indirect | ||||
| @ -62,6 +70,7 @@ require ( | ||||
| 	github.com/beorn7/perks v1.0.1 // indirect | ||||
| 	github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect | ||||
| 	github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect | ||||
| 	github.com/bits-and-blooms/bitset v1.7.0 // indirect | ||||
| 	github.com/btcsuite/btcd v0.23.4 // indirect | ||||
| 	github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect | ||||
| 	github.com/btcsuite/btcd/btcutil v1.1.3 // indirect | ||||
| @ -75,20 +84,22 @@ require ( | ||||
| 	github.com/cockroachdb/redact v1.1.5 // indirect | ||||
| 	github.com/coinbase/rosetta-sdk-go v0.7.9 // indirect | ||||
| 	github.com/confio/ics23/go v0.9.0 // indirect | ||||
| 	github.com/consensys/bavard v0.1.13 // indirect | ||||
| 	github.com/cosmos/btcutil v1.0.5 // indirect | ||||
| 	github.com/cosmos/gogogateway v1.2.0 // indirect | ||||
| 	github.com/cosmos/iavl v0.20.1 // indirect | ||||
| 	github.com/cosmos/ics23/go v0.10.0 // indirect | ||||
| 	github.com/cosmos/gogoproto v1.4.6 // indirect | ||||
| 	github.com/cosmos/gogoproto v1.4.11 // indirect | ||||
| 	github.com/cosmos/ledger-cosmos-go v0.13.1 // indirect | ||||
| 	github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect | ||||
| 	github.com/creachadair/taskgroup v0.4.2 // indirect | ||||
| 	github.com/danieljoos/wincred v1.1.2 // indirect | ||||
| 	github.com/davecgh/go-spew v1.1.1 // indirect | ||||
| 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect | ||||
| 	github.com/deckarep/golang-set v1.8.0 // indirect | ||||
| 	github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect | ||||
| 	github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect | ||||
| 	github.com/dgraph-io/badger/v2 v2.2007.4 // indirect | ||||
| 	github.com/dgraph-io/badger/v3 v3.2103.2 // indirect | ||||
| 	github.com/dgraph-io/ristretto v0.1.1 // indirect | ||||
| 	github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect | ||||
| 	github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect | ||||
| @ -97,7 +108,7 @@ require ( | ||||
| 	github.com/dvsekhvalnov/jose2go v1.6.0 // indirect | ||||
| 	github.com/edsrzf/mmap-go v1.0.0 // indirect | ||||
| 	github.com/felixge/httpsnoop v1.0.2 // indirect | ||||
| 	github.com/fsnotify/fsnotify v1.6.0 // indirect | ||||
| 	github.com/fsnotify/fsnotify v1.7.0 // indirect | ||||
| 	github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff // indirect | ||||
| 	github.com/getsentry/sentry-go v0.23.0 // indirect | ||||
| 	github.com/go-kit/log v0.2.1 // indirect | ||||
| @ -109,13 +120,16 @@ require ( | ||||
| 	github.com/go-stack/stack v1.8.1 // indirect | ||||
| 	github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect | ||||
| 	github.com/gogo/googleapis v1.4.1 // indirect | ||||
| 	github.com/gogo/gateway v1.1.0 // indirect | ||||
| 	github.com/golang/glog v1.1.2 // indirect | ||||
| 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | ||||
| 	github.com/golang/mock v1.6.0 // indirect | ||||
| 	github.com/golang/snappy v0.0.4 // indirect | ||||
| 	github.com/google/btree v1.1.2 // indirect | ||||
| 	github.com/google/go-cmp v0.6.0 // indirect | ||||
| 	github.com/google/orderedcode v0.0.1 // indirect | ||||
| 	github.com/google/flatbuffers v1.12.1 // indirect | ||||
| 	github.com/google/go-cmp v0.6.0 // indirect | ||||
| 	github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10 // indirect | ||||
| 	github.com/google/s2a-go v0.1.7 // indirect | ||||
| 	github.com/google/uuid v1.4.0 // indirect | ||||
| 	github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect | ||||
| @ -144,9 +158,9 @@ require ( | ||||
| 	github.com/jackpal/go-nat-pmp v1.0.2 // indirect | ||||
| 	github.com/jmespath/go-jmespath v0.4.0 // indirect | ||||
| 	github.com/jmhodges/levigo v1.0.0 // indirect | ||||
| 	github.com/klauspost/compress v1.16.7 // indirect | ||||
| 	github.com/kr/pretty v0.3.1 // indirect | ||||
| 	github.com/kr/text v0.2.0 // indirect | ||||
| 	github.com/klauspost/compress v1.17.0 // indirect | ||||
| 	github.com/lib/pq v1.10.7 // indirect | ||||
| 	github.com/libp2p/go-buffer-pool v0.1.0 // indirect | ||||
| 	github.com/magiconair/properties v1.8.7 // indirect | ||||
| @ -160,14 +174,15 @@ require ( | ||||
| 	github.com/mitchellh/go-homedir v1.1.0 // indirect | ||||
| 	github.com/mitchellh/go-testing-interface v1.14.1 // indirect | ||||
| 	github.com/mitchellh/mapstructure v1.5.0 // indirect | ||||
| 	github.com/mmcloughlin/addchain v0.4.0 // indirect | ||||
| 	github.com/mtibben/percent v0.2.1 // indirect | ||||
| 	github.com/olekukonko/tablewriter v0.0.5 // indirect | ||||
| 	github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect | ||||
| 	github.com/pkg/errors v0.9.1 // indirect | ||||
| 	github.com/pmezard/go-difflib v1.0.0 // indirect | ||||
| 	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect | ||||
| 	github.com/prometheus/client_model v0.3.0 // indirect | ||||
| 	github.com/prometheus/common v0.42.0 // indirect | ||||
| 	github.com/prometheus/procfs v0.9.0 // indirect | ||||
| 	github.com/prometheus/procfs v0.12.0 // indirect | ||||
| 	github.com/prometheus/tsdb v0.7.1 // indirect | ||||
| 	github.com/rakyll/statik v0.1.7 // indirect | ||||
| 	github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect | ||||
| @ -177,8 +192,12 @@ require ( | ||||
| 	github.com/rs/zerolog v1.32.0 // indirect | ||||
| 	github.com/sasha-s/go-deadlock v0.3.1 // indirect | ||||
| 	github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect | ||||
| 	github.com/spf13/afero v1.9.5 // indirect | ||||
| 	github.com/spf13/jwalterweatherman v1.1.0 // indirect | ||||
| 	github.com/sagikazarmark/locafero v0.4.0 // indirect | ||||
| 	github.com/sagikazarmark/slog-shim v0.1.0 // indirect | ||||
| 	github.com/sasha-s/go-deadlock v0.3.1 // indirect | ||||
| 	github.com/sourcegraph/conc v0.3.0 // indirect | ||||
| 	github.com/spf13/afero v1.11.0 // indirect | ||||
| 	github.com/spf13/pflag v1.0.5 // indirect | ||||
| 	github.com/status-im/keycard-go v0.2.0 // indirect | ||||
| 	github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect | ||||
| @ -192,24 +211,26 @@ require ( | ||||
| 	github.com/zondax/ledger-go v0.14.3 // indirect | ||||
| 	go.etcd.io/bbolt v1.3.8 // indirect | ||||
| 	go.opencensus.io v0.24.0 // indirect | ||||
| 	go.opentelemetry.io/otel v1.19.0 // indirect | ||||
| 	go.opentelemetry.io/otel/metric v1.19.0 // indirect | ||||
| 	go.opentelemetry.io/otel/trace v1.19.0 // indirect | ||||
| 	golang.org/x/net v0.19.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.13.0 // indirect | ||||
| 	golang.org/x/sync v0.4.0 // indirect | ||||
| 	golang.org/x/sys v0.16.0 // indirect | ||||
| 	golang.org/x/term v0.15.0 // indirect | ||||
| 	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect | ||||
| 	go.uber.org/multierr v1.10.0 // indirect | ||||
| 	golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect | ||||
| 	golang.org/x/net v0.23.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.15.0 // indirect | ||||
| 	golang.org/x/sync v0.5.0 // indirect | ||||
| 	golang.org/x/sys v0.18.0 // indirect | ||||
| 	golang.org/x/term v0.18.0 // indirect | ||||
| 	golang.org/x/text v0.14.0 // indirect | ||||
| 	google.golang.org/api v0.149.0 // indirect | ||||
| 	golang.org/x/time v0.5.0 // indirect | ||||
| 	google.golang.org/api v0.153.0 // indirect | ||||
| 	google.golang.org/appengine v1.6.8 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect | ||||
| 	gopkg.in/ini.v1 v1.67.0 // indirect | ||||
| 	gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect | ||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||
| 	nhooyr.io/websocket v1.8.6 // indirect | ||||
| 	pgregory.net/rapid v1.1.0 // indirect | ||||
| 	pgregory.net/rapid v0.5.5 // indirect | ||||
| 	rsc.io/tmplfunc v0.0.3 // indirect | ||||
| ) | ||||
| 
 | ||||
| replace ( | ||||
| @ -222,8 +243,10 @@ replace ( | ||||
| 	github.com/cosmos/cosmos-sdk => github.com/kava-labs/cosmos-sdk v0.47.10-kava.1 | ||||
| 	// See https://github.com/cosmos/cosmos-sdk/pull/13093 | ||||
| 	github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 | ||||
| 	// Use go-ethereum fork with precompiles | ||||
| 	github.com/ethereum/go-ethereum => github.com/evmos/go-ethereum v1.10.26-evmos-rc2 | ||||
| 	// Use ethermint fork that respects min-gas-price with NoBaseFee true and london enabled, and includes eip712 support | ||||
| 	github.com/evmos/ethermint => github.com/kava-labs/ethermint v0.21.0-kava-v26.2 | ||||
| 	github.com/evmos/ethermint => github.com/0glabs/ethermint v0.21.0-0glabs-v26.3 | ||||
| 	// See https://github.com/cosmos/cosmos-sdk/pull/10401, https://github.com/cosmos/cosmos-sdk/commit/0592ba6158cd0bf49d894be1cef4faeec59e8320 | ||||
| 	github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0 | ||||
| 	// Downgraded to avoid bugs in following commits which causes "version does not exist" errors | ||||
|  | ||||
							
								
								
									
										226
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										226
									
								
								go.sum
									
									
									
									
									
								
							| @ -4,7 +4,6 @@ cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSR | ||||
| cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= | ||||
| cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= | ||||
| cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= | ||||
| cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= | ||||
| cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= | ||||
| cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= | ||||
| cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= | ||||
| @ -18,7 +17,6 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY | ||||
| cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= | ||||
| cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= | ||||
| cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= | ||||
| cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= | ||||
| cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= | ||||
| cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= | ||||
| cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= | ||||
| @ -34,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 | ||||
| cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= | ||||
| cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= | ||||
| cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= | ||||
| cloud.google.com/go v0.111.0 h1:YHLKNupSD1KqjDbQ3+LVdQ81h/UJbJyZG203cEfnQgM= | ||||
| cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU= | ||||
| cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= | ||||
| cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= | ||||
| cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= | ||||
| cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= | ||||
| cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= | ||||
| @ -173,12 +171,11 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo | ||||
| cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= | ||||
| cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= | ||||
| cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= | ||||
| cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= | ||||
| cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= | ||||
| cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= | ||||
| cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= | ||||
| cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= | ||||
| cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= | ||||
| cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= | ||||
| cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= | ||||
| cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= | ||||
| cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= | ||||
| cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= | ||||
| @ -212,22 +209,26 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= | ||||
| filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= | ||||
| git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3/go.mod h1:wMEGFFFNuPos7vHmWXfszqImLppbc0wEhh6JBfJIUgw= | ||||
| git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9/go.mod h1:BVJwbDfVjCjoFiKrhkei6NdGcZYpkDkdyCdg1ukytRA= | ||||
| github.com/0glabs/ethermint v0.21.0-0g.v2.0.0 h1:3sfsRkaPaG7v2smfxEJ2TvwPcVMIkG8yRRVR8+tbYkc= | ||||
| github.com/0glabs/ethermint v0.21.0-0g.v2.0.0/go.mod h1:peUmQT71k9BOBgoWoIRWRrM/O01mffVjIH0RLnoaFuI= | ||||
| github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= | ||||
| github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= | ||||
| github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= | ||||
| github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= | ||||
| github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= | ||||
| github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= | ||||
| github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= | ||||
| github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||
| github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= | ||||
| github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | ||||
| github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= | ||||
| github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= | ||||
| github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= | ||||
| github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= | ||||
| github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= | ||||
| github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= | ||||
| github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= | ||||
| github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= | ||||
| github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= | ||||
| github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= | ||||
| github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= | ||||
| github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= | ||||
| github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= | ||||
| @ -291,6 +292,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ | ||||
| github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= | ||||
| github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= | ||||
| github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= | ||||
| github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= | ||||
| github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= | ||||
| github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= | ||||
| github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= | ||||
| github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= | ||||
| @ -302,8 +305,8 @@ github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZg | ||||
| github.com/btcsuite/btcd v0.23.4 h1:IzV6qqkfwbItOS/sg/aDfPDsjPP8twrCOE2R93hxMlQ= | ||||
| github.com/btcsuite/btcd v0.23.4/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= | ||||
| github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= | ||||
| github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= | ||||
| github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= | ||||
| github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= | ||||
| github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= | ||||
| github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= | ||||
| github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= | ||||
| @ -347,9 +350,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL | ||||
| github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= | ||||
| github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||||
| github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= | ||||
| github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= | ||||
| github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= | ||||
| github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= | ||||
| github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= | ||||
| github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= | ||||
| github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= | ||||
| @ -392,8 +392,12 @@ github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71 h1:MFLTqgfJcl | ||||
| github.com/coniks-sys/coniks-go v0.0.0-20180722014011-11acf4819b71/go.mod h1:TrHYHH4Wze7v7Hkwu1MH1W+mCPQKM+gs+PicdEV14o8= | ||||
| github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= | ||||
| github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= | ||||
| github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= | ||||
| github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= | ||||
| github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= | ||||
| github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= | ||||
| github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= | ||||
| github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= | ||||
| github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= | ||||
| github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= | ||||
| github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= | ||||
| @ -422,6 +426,12 @@ github.com/cosmos/ibc-go/v7 v7.4.0 h1:8FqYMptvksgMvlbN4UW9jFxTXzsPyfAzEZurujXac8 | ||||
| github.com/cosmos/ibc-go/v7 v7.4.0/go.mod h1:L/KaEhzV5TGUCTfGysVgMBQtl5Dm7hHitfpk+GIeoAo= | ||||
| github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= | ||||
| github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= | ||||
| github.com/cosmos/gogoproto v1.4.11 h1:LZcMHrx4FjUgrqQSWeaGC1v/TeuVFqSLa43CC6aWR2g= | ||||
| github.com/cosmos/gogoproto v1.4.11/go.mod h1:/g39Mh8m17X8Q/GDEs5zYTSNaNnInBSohtaxzQnYq1Y= | ||||
| github.com/cosmos/iavl v0.19.5 h1:rGA3hOrgNxgRM5wYcSCxgQBap7fW82WZgY78V9po/iY= | ||||
| github.com/cosmos/iavl v0.19.5/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= | ||||
| github.com/cosmos/ibc-go/v6 v6.1.1 h1:oqqMNyjj6SLQF8rvgCaDGwfdITEIsbhs8F77/8xvRIo= | ||||
| github.com/cosmos/ibc-go/v6 v6.1.1/go.mod h1:NL17FpFAaWjRFVb1T7LUKuOoMSsATPpu+Icc4zL5/Ik= | ||||
| github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= | ||||
| github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= | ||||
| github.com/cosmos/ledger-cosmos-go v0.13.1 h1:12ac9+GwBb9BjP7X5ygpFk09Itwzjzfmg6A2CWFjoVs= | ||||
| @ -431,10 +441,13 @@ github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFg | ||||
| github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= | ||||
| github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= | ||||
| github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= | ||||
| github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= | ||||
| github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= | ||||
| github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= | ||||
| github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= | ||||
| github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | ||||
| github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= | ||||
| @ -443,8 +456,9 @@ github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnG | ||||
| github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= | ||||
| github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= | ||||
| github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= | ||||
| github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= | ||||
| github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= | ||||
| @ -461,6 +475,7 @@ github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdw | ||||
| github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= | ||||
| github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= | ||||
| github.com/dgraph-io/ristretto v0.0.3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= | ||||
| github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= | ||||
| github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= | ||||
| github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= | ||||
| github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= | ||||
| @ -472,7 +487,7 @@ github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16 | ||||
| github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= | ||||
| github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= | ||||
| github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= | ||||
| github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= | ||||
| github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= | ||||
| github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= | ||||
| github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= | ||||
| github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= | ||||
| @ -504,14 +519,14 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m | ||||
| github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= | ||||
| github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= | ||||
| github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= | ||||
| github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= | ||||
| github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s= | ||||
| github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg= | ||||
| github.com/evmos/go-ethereum v1.10.26-evmos-rc2 h1:tYghk1ZZ8X4/OQ4YI9hvtm8aSN8OSqO0g9vo/sCMdBo= | ||||
| github.com/evmos/go-ethereum v1.10.26-evmos-rc2/go.mod h1:/6CsT5Ceen2WPLI/oCA3xMcZ5sWMF/D46SjM/ayY0Oo= | ||||
| github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= | ||||
| github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= | ||||
| github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= | ||||
| github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= | ||||
| github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= | ||||
| github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= | ||||
| github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= | ||||
| github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= | ||||
| github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= | ||||
| @ -521,10 +536,13 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB | ||||
| github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= | ||||
| github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= | ||||
| github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= | ||||
| github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= | ||||
| github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= | ||||
| github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||
| github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= | ||||
| github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= | ||||
| github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= | ||||
| github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= | ||||
| github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= | ||||
| github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= | ||||
| github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= | ||||
| github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= | ||||
| github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= | ||||
| @ -696,21 +714,24 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf | ||||
| github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||
| github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= | ||||
| github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||
| github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10 h1:CqYfpuYIjnlNxM3msdyPRKabhXZWbKjf3Q8BWROFBso= | ||||
| github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= | ||||
| github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | ||||
| github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= | ||||
| github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= | ||||
| github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= | ||||
| github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= | ||||
| github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= | ||||
| github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||
| github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= | ||||
| @ -730,7 +751,6 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd | ||||
| github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= | ||||
| github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= | ||||
| github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= | ||||
| github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= | ||||
| github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||
| github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | ||||
| github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= | ||||
| @ -812,7 +832,6 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr | ||||
| github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= | ||||
| github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= | ||||
| github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= | ||||
| github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= | ||||
| github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= | ||||
| github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= | ||||
| github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= | ||||
| @ -844,6 +863,8 @@ github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M | ||||
| github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | ||||
| github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= | ||||
| github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= | ||||
| github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= | ||||
| github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= | ||||
| github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= | ||||
| github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= | ||||
| github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | ||||
| @ -891,6 +912,8 @@ github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrD | ||||
| github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= | ||||
| github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= | ||||
| github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= | ||||
| github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= | ||||
| github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= | ||||
| github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | ||||
| github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= | ||||
| github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | ||||
| @ -898,7 +921,6 @@ github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPR | ||||
| github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||
| github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= | ||||
| github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | ||||
| github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | ||||
| github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= | ||||
| @ -909,9 +931,11 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||||
| github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | ||||
| github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||||
| github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= | ||||
| github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= | ||||
| github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= | ||||
| github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= | ||||
| github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= | ||||
| github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= | ||||
| github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= | ||||
| github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= | ||||
| github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= | ||||
| @ -985,6 +1009,9 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua | ||||
| github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
| github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= | ||||
| github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= | ||||
| github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= | ||||
| github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= | ||||
| github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= | ||||
| github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= | ||||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||||
| @ -1022,6 +1049,7 @@ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N | ||||
| github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= | ||||
| github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= | ||||
| github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= | ||||
| github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= | ||||
| github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= | ||||
| @ -1062,6 +1090,8 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 | ||||
| github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= | ||||
| github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= | ||||
| github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= | ||||
| github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= | ||||
| github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= | ||||
| github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= | ||||
| github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= | ||||
| github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= | ||||
| @ -1079,10 +1109,10 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE | ||||
| github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||
| github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||
| github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= | ||||
| github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= | ||||
| github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= | ||||
| github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= | ||||
| github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= | ||||
| github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= | ||||
| @ -1116,8 +1146,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT | ||||
| github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= | ||||
| github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
| github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | ||||
| github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= | ||||
| github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= | ||||
| github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= | ||||
| github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= | ||||
| github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= | ||||
| github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= | ||||
| github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= | ||||
| @ -1148,6 +1178,10 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD | ||||
| github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= | ||||
| github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | ||||
| github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= | ||||
| github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= | ||||
| github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= | ||||
| github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= | ||||
| github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= | ||||
| github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= | ||||
| github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= | ||||
| github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= | ||||
| @ -1169,6 +1203,8 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1 | ||||
| github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||||
| github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | ||||
| github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= | ||||
| github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= | ||||
| github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= | ||||
| github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||||
| github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= | ||||
| github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||||
| @ -1182,9 +1218,16 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 | ||||
| github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= | ||||
| github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= | ||||
| github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= | ||||
| github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= | ||||
| github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= | ||||
| github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | ||||
| github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= | ||||
| github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= | ||||
| github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= | ||||
| github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= | ||||
| github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= | ||||
| github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= | ||||
| github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | ||||
| github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= | ||||
| github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= | ||||
| github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||
| github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||||
| github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | ||||
| @ -1192,6 +1235,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An | ||||
| github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= | ||||
| github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= | ||||
| github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= | ||||
| github.com/spf13/viper v1.18.1 h1:rmuU42rScKWlhhJDyXZRKJQHXFX02chSVW1IvkPGiVM= | ||||
| github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= | ||||
| github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= | ||||
| github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= | ||||
| github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= | ||||
| @ -1211,6 +1256,7 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 | ||||
| github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
| github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
| github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
| github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= | ||||
| github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||||
| github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||||
| github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||
| @ -1218,6 +1264,11 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU | ||||
| github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||
| github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= | ||||
| github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= | ||||
| github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | ||||
| github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||
| github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= | ||||
| github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= | ||||
| github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= | ||||
| github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= | ||||
| github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= | ||||
| github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= | ||||
| @ -1273,6 +1324,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de | ||||
| github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||
| github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||
| github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | ||||
| github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= | ||||
| github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= | ||||
| @ -1309,6 +1361,8 @@ go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= | ||||
| go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= | ||||
| go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= | ||||
| go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= | ||||
| go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= | ||||
| go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= | ||||
| go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= | ||||
| go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | ||||
| go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | ||||
| @ -1334,16 +1388,35 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh | ||||
| golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||||
| golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= | ||||
| golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= | ||||
| golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= | ||||
| golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||||
| golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||||
| golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= | ||||
| golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= | ||||
| golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= | ||||
| golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= | ||||
| golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= | ||||
| golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= | ||||
| golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||
| golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= | ||||
| golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= | ||||
| golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | ||||
| golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= | ||||
| golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= | ||||
| golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | ||||
| golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | ||||
| golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | ||||
| golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= | ||||
| golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= | ||||
| golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= | ||||
| golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= | ||||
| golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= | ||||
| golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= | ||||
| golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= | ||||
| golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= | ||||
| golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= | ||||
| golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | ||||
| golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= | ||||
| @ -1364,10 +1437,14 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= | ||||
| golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= | ||||
| golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | ||||
| golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= | ||||
| golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= | ||||
| golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= | ||||
| golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= | ||||
| golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= | ||||
| golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||
| @ -1411,7 +1488,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY | ||||
| golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||
| @ -1436,8 +1512,10 @@ golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfS | ||||
| golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= | ||||
| golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= | ||||
| golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= | ||||
| golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= | ||||
| golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= | ||||
| golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= | ||||
| golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= | ||||
| golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= | ||||
| golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= | ||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
| golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| @ -1463,8 +1541,10 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri | ||||
| golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= | ||||
| golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= | ||||
| golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= | ||||
| golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= | ||||
| golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= | ||||
| golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= | ||||
| golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= | ||||
| golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= | ||||
| golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= | ||||
| golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| @ -1479,8 +1559,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ | ||||
| golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= | ||||
| golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= | ||||
| golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= | ||||
| golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||||
| golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| @ -1541,7 +1621,6 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| @ -1550,7 +1629,6 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w | ||||
| golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| @ -1559,7 +1637,6 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc | ||||
| golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| @ -1589,17 +1666,22 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= | ||||
| golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= | ||||
| golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= | ||||
| golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= | ||||
| golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= | ||||
| golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= | ||||
| golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= | ||||
| golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= | ||||
| golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= | ||||
| golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= | ||||
| golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= | ||||
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| @ -1624,6 +1706,8 @@ golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxb | ||||
| golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | ||||
| golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= | ||||
| golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= | ||||
| golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| @ -1647,6 +1731,7 @@ golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtn | ||||
| golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191126055441-b0650ceb63d9/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= | ||||
| @ -1676,17 +1761,19 @@ golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4f | ||||
| golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||
| golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= | ||||
| golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||
| golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= | ||||
| golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= | ||||
| golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= | ||||
| golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= | ||||
| golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= | ||||
| golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= | ||||
| golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= | ||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| @ -1751,8 +1838,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ | ||||
| google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= | ||||
| google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= | ||||
| google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= | ||||
| google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= | ||||
| google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= | ||||
| google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= | ||||
| google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= | ||||
| google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | ||||
| google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
| google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||
| @ -1803,10 +1890,8 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D | ||||
| google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||
| @ -1873,12 +1958,18 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw | ||||
| google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= | ||||
| google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= | ||||
| google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= | ||||
| google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 h1:nz5NESFLZbJGPFxDT/HCn+V1mZ8JGNoY4nUpmW/Y2eg= | ||||
| google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917/go.mod h1:pZqR+glSb11aJ+JQcczCvgf47+duRuzNSKqE8YAQnV0= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 h1:s1w3X6gQxwrLEpxnLd/qXTVLgQE2yXwaOaoa6IlY/+o= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1 h1:gphdwh0npgs8elJ4T6J+DQJHPVF7RsuJHCfwztUb4J4= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20240108191215-35c7eff3a6b1/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= | ||||
| google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8= | ||||
| google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= | ||||
| google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= | ||||
| google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= | ||||
| google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= | ||||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= | ||||
| google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= | ||||
| google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | ||||
| google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= | ||||
| @ -1920,8 +2011,10 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu | ||||
| google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= | ||||
| google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= | ||||
| google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= | ||||
| google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= | ||||
| google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= | ||||
| google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= | ||||
| google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= | ||||
| google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k= | ||||
| google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= | ||||
| google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= | ||||
| google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= | ||||
| google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= | ||||
| @ -1956,11 +2049,9 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= | ||||
| gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||
| gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= | ||||
| gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= | ||||
| gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= | ||||
| gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= | ||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | ||||
| gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= | ||||
| gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= | ||||
| gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= | ||||
| gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
| @ -1997,6 +2088,7 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 | ||||
| rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= | ||||
| rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= | ||||
| rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= | ||||
| rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= | ||||
| rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= | ||||
| sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | ||||
| sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= | ||||
|  | ||||
							
								
								
									
										6
									
								
								precompiles/common/errors.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								precompiles/common/errors.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| package common | ||||
| 
 | ||||
| const ( | ||||
| 	ErrGetStateDB          = "get EVM StateDB failed" | ||||
| 	ErrInvalidNumberOfArgs = "invalid number of arguments; expected %d; got: %d" | ||||
| ) | ||||
							
								
								
									
										363
									
								
								precompiles/dasigners/IDASigners.abi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										363
									
								
								precompiles/dasigners/IDASigners.abi
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,363 @@ | ||||
| [ | ||||
|   { | ||||
|     "anonymous": false, | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "indexed": true, | ||||
|         "internalType": "address", | ||||
|         "name": "signer", | ||||
|         "type": "address" | ||||
|       }, | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "X", | ||||
|             "type": "uint256" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "Y", | ||||
|             "type": "uint256" | ||||
|           } | ||||
|         ], | ||||
|         "indexed": false, | ||||
|         "internalType": "struct BN254.G1Point", | ||||
|         "name": "pkG1", | ||||
|         "type": "tuple" | ||||
|       }, | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "uint256[2]", | ||||
|             "name": "X", | ||||
|             "type": "uint256[2]" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "uint256[2]", | ||||
|             "name": "Y", | ||||
|             "type": "uint256[2]" | ||||
|           } | ||||
|         ], | ||||
|         "indexed": false, | ||||
|         "internalType": "struct BN254.G2Point", | ||||
|         "name": "pkG2", | ||||
|         "type": "tuple" | ||||
|       } | ||||
|     ], | ||||
|     "name": "NewSigner", | ||||
|     "type": "event" | ||||
|   }, | ||||
|   { | ||||
|     "anonymous": false, | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "indexed": true, | ||||
|         "internalType": "address", | ||||
|         "name": "signer", | ||||
|         "type": "address" | ||||
|       }, | ||||
|       { | ||||
|         "indexed": false, | ||||
|         "internalType": "string", | ||||
|         "name": "socket", | ||||
|         "type": "string" | ||||
|       } | ||||
|     ], | ||||
|     "name": "SocketUpdated", | ||||
|     "type": "event" | ||||
|   }, | ||||
|   { | ||||
|     "inputs": [], | ||||
|     "name": "epochNumber", | ||||
|     "outputs": [ | ||||
|       { | ||||
|         "internalType": "uint256", | ||||
|         "name": "", | ||||
|         "type": "uint256" | ||||
|       } | ||||
|     ], | ||||
|     "stateMutability": "view", | ||||
|     "type": "function" | ||||
|   }, | ||||
|   { | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "internalType": "uint256", | ||||
|         "name": "epoch", | ||||
|         "type": "uint256" | ||||
|       }, | ||||
|       { | ||||
|         "internalType": "bytes", | ||||
|         "name": "signersBitmap", | ||||
|         "type": "bytes" | ||||
|       } | ||||
|     ], | ||||
|     "name": "getAggPkG1", | ||||
|     "outputs": [ | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "X", | ||||
|             "type": "uint256" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "Y", | ||||
|             "type": "uint256" | ||||
|           } | ||||
|         ], | ||||
|         "internalType": "struct BN254.G1Point", | ||||
|         "name": "aggPkG1", | ||||
|         "type": "tuple" | ||||
|       } | ||||
|     ], | ||||
|     "stateMutability": "view", | ||||
|     "type": "function" | ||||
|   }, | ||||
|   { | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "internalType": "address", | ||||
|         "name": "account", | ||||
|         "type": "address" | ||||
|       } | ||||
|     ], | ||||
|     "name": "getSigner", | ||||
|     "outputs": [ | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "address", | ||||
|             "name": "signer", | ||||
|             "type": "address" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "string", | ||||
|             "name": "socket", | ||||
|             "type": "string" | ||||
|           }, | ||||
|           { | ||||
|             "components": [ | ||||
|               { | ||||
|                 "internalType": "uint256", | ||||
|                 "name": "X", | ||||
|                 "type": "uint256" | ||||
|               }, | ||||
|               { | ||||
|                 "internalType": "uint256", | ||||
|                 "name": "Y", | ||||
|                 "type": "uint256" | ||||
|               } | ||||
|             ], | ||||
|             "internalType": "struct BN254.G1Point", | ||||
|             "name": "pkG1", | ||||
|             "type": "tuple" | ||||
|           }, | ||||
|           { | ||||
|             "components": [ | ||||
|               { | ||||
|                 "internalType": "uint256[2]", | ||||
|                 "name": "X", | ||||
|                 "type": "uint256[2]" | ||||
|               }, | ||||
|               { | ||||
|                 "internalType": "uint256[2]", | ||||
|                 "name": "Y", | ||||
|                 "type": "uint256[2]" | ||||
|               } | ||||
|             ], | ||||
|             "internalType": "struct BN254.G2Point", | ||||
|             "name": "pkG2", | ||||
|             "type": "tuple" | ||||
|           } | ||||
|         ], | ||||
|         "internalType": "struct IDASigners.SignerDetail", | ||||
|         "name": "", | ||||
|         "type": "tuple" | ||||
|       } | ||||
|     ], | ||||
|     "stateMutability": "view", | ||||
|     "type": "function" | ||||
|   }, | ||||
|   { | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "internalType": "uint256", | ||||
|         "name": "epoch", | ||||
|         "type": "uint256" | ||||
|       } | ||||
|     ], | ||||
|     "name": "getSigners", | ||||
|     "outputs": [ | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "address", | ||||
|             "name": "signer", | ||||
|             "type": "address" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "string", | ||||
|             "name": "socket", | ||||
|             "type": "string" | ||||
|           }, | ||||
|           { | ||||
|             "components": [ | ||||
|               { | ||||
|                 "internalType": "uint256", | ||||
|                 "name": "X", | ||||
|                 "type": "uint256" | ||||
|               }, | ||||
|               { | ||||
|                 "internalType": "uint256", | ||||
|                 "name": "Y", | ||||
|                 "type": "uint256" | ||||
|               } | ||||
|             ], | ||||
|             "internalType": "struct BN254.G1Point", | ||||
|             "name": "pkG1", | ||||
|             "type": "tuple" | ||||
|           }, | ||||
|           { | ||||
|             "components": [ | ||||
|               { | ||||
|                 "internalType": "uint256[2]", | ||||
|                 "name": "X", | ||||
|                 "type": "uint256[2]" | ||||
|               }, | ||||
|               { | ||||
|                 "internalType": "uint256[2]", | ||||
|                 "name": "Y", | ||||
|                 "type": "uint256[2]" | ||||
|               } | ||||
|             ], | ||||
|             "internalType": "struct BN254.G2Point", | ||||
|             "name": "pkG2", | ||||
|             "type": "tuple" | ||||
|           } | ||||
|         ], | ||||
|         "internalType": "struct IDASigners.SignerDetail[]", | ||||
|         "name": "details", | ||||
|         "type": "tuple[]" | ||||
|       } | ||||
|     ], | ||||
|     "stateMutability": "view", | ||||
|     "type": "function" | ||||
|   }, | ||||
|   { | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "X", | ||||
|             "type": "uint256" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "Y", | ||||
|             "type": "uint256" | ||||
|           } | ||||
|         ], | ||||
|         "internalType": "struct BN254.G1Point", | ||||
|         "name": "_signature", | ||||
|         "type": "tuple" | ||||
|       } | ||||
|     ], | ||||
|     "name": "registerNextEpoch", | ||||
|     "outputs": [], | ||||
|     "stateMutability": "nonpayable", | ||||
|     "type": "function" | ||||
|   }, | ||||
|   { | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "address", | ||||
|             "name": "signer", | ||||
|             "type": "address" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "string", | ||||
|             "name": "socket", | ||||
|             "type": "string" | ||||
|           }, | ||||
|           { | ||||
|             "components": [ | ||||
|               { | ||||
|                 "internalType": "uint256", | ||||
|                 "name": "X", | ||||
|                 "type": "uint256" | ||||
|               }, | ||||
|               { | ||||
|                 "internalType": "uint256", | ||||
|                 "name": "Y", | ||||
|                 "type": "uint256" | ||||
|               } | ||||
|             ], | ||||
|             "internalType": "struct BN254.G1Point", | ||||
|             "name": "pkG1", | ||||
|             "type": "tuple" | ||||
|           }, | ||||
|           { | ||||
|             "components": [ | ||||
|               { | ||||
|                 "internalType": "uint256[2]", | ||||
|                 "name": "X", | ||||
|                 "type": "uint256[2]" | ||||
|               }, | ||||
|               { | ||||
|                 "internalType": "uint256[2]", | ||||
|                 "name": "Y", | ||||
|                 "type": "uint256[2]" | ||||
|               } | ||||
|             ], | ||||
|             "internalType": "struct BN254.G2Point", | ||||
|             "name": "pkG2", | ||||
|             "type": "tuple" | ||||
|           } | ||||
|         ], | ||||
|         "internalType": "struct IDASigners.SignerDetail", | ||||
|         "name": "_signer", | ||||
|         "type": "tuple" | ||||
|       }, | ||||
|       { | ||||
|         "components": [ | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "X", | ||||
|             "type": "uint256" | ||||
|           }, | ||||
|           { | ||||
|             "internalType": "uint256", | ||||
|             "name": "Y", | ||||
|             "type": "uint256" | ||||
|           } | ||||
|         ], | ||||
|         "internalType": "struct BN254.G1Point", | ||||
|         "name": "_signature", | ||||
|         "type": "tuple" | ||||
|       } | ||||
|     ], | ||||
|     "name": "registerSigner", | ||||
|     "outputs": [], | ||||
|     "stateMutability": "nonpayable", | ||||
|     "type": "function" | ||||
|   }, | ||||
|   { | ||||
|     "inputs": [ | ||||
|       { | ||||
|         "internalType": "string", | ||||
|         "name": "socket", | ||||
|         "type": "string" | ||||
|       } | ||||
|     ], | ||||
|     "name": "updateSocket", | ||||
|     "outputs": [], | ||||
|     "stateMutability": "nonpayable", | ||||
|     "type": "function" | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										387
									
								
								precompiles/dasigners/IDASigners.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										387
									
								
								precompiles/dasigners/IDASigners.sol
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,387 @@ | ||||
| // Sources flattened with hardhat v2.22.2 https://hardhat.org | ||||
| 
 | ||||
| // SPDX-License-Identifier: LGPL-3.0-only AND MIT | ||||
| 
 | ||||
| // File contracts/libraries/BN254.sol | ||||
| 
 | ||||
| // Original license: SPDX_License_Identifier: MIT | ||||
| // several functions are taken or adapted from https://github.com/HarryR/solcrypto/blob/master/contracts/altbn128.sol (MIT license): | ||||
| // Copyright 2017 Christian Reitwiessner | ||||
| // Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| // of this software and associated documentation files (the "Software"), to | ||||
| // deal in the Software without restriction, including without limitation the | ||||
| // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||||
| // sell copies of the Software, and to permit persons to whom the Software is | ||||
| // furnished to do so, subject to the following conditions: | ||||
| // The above copyright notice and this permission notice shall be included in | ||||
| // all copies or substantial portions of the Software. | ||||
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||
| // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | ||||
| // IN THE SOFTWARE. | ||||
| 
 | ||||
| // The remainder of the code in this library is written by LayrLabs Inc. and is also under an MIT license | ||||
| 
 | ||||
| pragma solidity ^0.8.12; | ||||
| 
 | ||||
| /** | ||||
|  * @title Library for operations on the BN254 elliptic curve. | ||||
|  * @author Layr Labs, Inc. | ||||
|  * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service | ||||
|  * @notice Contains BN254 parameters, common operations (addition, scalar mul, pairing), and BLS signature functionality. | ||||
|  */ | ||||
| library BN254 { | ||||
|     // modulus for the underlying field F_p of the elliptic curve | ||||
|     uint internal constant FP_MODULUS = 21888242871839275222246405745257275088696311157297823662689037894645226208583; | ||||
|     // modulus for the underlying field F_r of the elliptic curve | ||||
|     uint internal constant FR_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617; | ||||
| 
 | ||||
|     struct G1Point { | ||||
|         uint X; | ||||
|         uint Y; | ||||
|     } | ||||
| 
 | ||||
|     // Encoding of field elements is: X[1] * i + X[0] | ||||
|     struct G2Point { | ||||
|         uint[2] X; | ||||
|         uint[2] Y; | ||||
|     } | ||||
| 
 | ||||
|     function generatorG1() internal pure returns (G1Point memory) { | ||||
|         return G1Point(1, 2); | ||||
|     } | ||||
| 
 | ||||
|     // generator of group G2 | ||||
|     /// @dev Generator point in F_q2 is of the form: (x0 + ix1, y0 + iy1). | ||||
|     uint internal constant G2x1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; | ||||
|     uint internal constant G2x0 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; | ||||
|     uint internal constant G2y1 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; | ||||
|     uint internal constant G2y0 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; | ||||
| 
 | ||||
|     /// @notice returns the G2 generator | ||||
|     /// @dev mind the ordering of the 1s and 0s! | ||||
|     ///      this is because of the (unknown to us) convention used in the bn254 pairing precompile contract | ||||
|     ///      "Elements a * i + b of F_p^2 are encoded as two elements of F_p, (a, b)." | ||||
|     ///      https://github.com/ethereum/EIPs/blob/master/EIPS/eip-197.md#encoding | ||||
|     function generatorG2() internal pure returns (G2Point memory) { | ||||
|         return G2Point([G2x1, G2x0], [G2y1, G2y0]); | ||||
|     } | ||||
| 
 | ||||
|     // negation of the generator of group G2 | ||||
|     /// @dev Generator point in F_q2 is of the form: (x0 + ix1, y0 + iy1). | ||||
|     uint internal constant nG2x1 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; | ||||
|     uint internal constant nG2x0 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; | ||||
|     uint internal constant nG2y1 = 17805874995975841540914202342111839520379459829704422454583296818431106115052; | ||||
|     uint internal constant nG2y0 = 13392588948715843804641432497768002650278120570034223513918757245338268106653; | ||||
| 
 | ||||
|     function negGeneratorG2() internal pure returns (G2Point memory) { | ||||
|         return G2Point([nG2x1, nG2x0], [nG2y1, nG2y0]); | ||||
|     } | ||||
| 
 | ||||
|     bytes32 internal constant powersOfTauMerkleRoot = | ||||
|         0x22c998e49752bbb1918ba87d6d59dd0e83620a311ba91dd4b2cc84990b31b56f; | ||||
| 
 | ||||
|     /** | ||||
|      * @param p Some point in G1. | ||||
|      * @return The negation of `p`, i.e. p.plus(p.negate()) should be zero. | ||||
|      */ | ||||
|     function negate(G1Point memory p) internal pure returns (G1Point memory) { | ||||
|         // The prime q in the base field F_q for G1 | ||||
|         if (p.X == 0 && p.Y == 0) { | ||||
|             return G1Point(0, 0); | ||||
|         } else { | ||||
|             return G1Point(p.X, FP_MODULUS - (p.Y % FP_MODULUS)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @return r the sum of two points of G1 | ||||
|      */ | ||||
|     function plus(G1Point memory p1, G1Point memory p2) internal view returns (G1Point memory r) { | ||||
|         uint[4] memory input; | ||||
|         input[0] = p1.X; | ||||
|         input[1] = p1.Y; | ||||
|         input[2] = p2.X; | ||||
|         input[3] = p2.Y; | ||||
|         bool success; | ||||
| 
 | ||||
|         // solium-disable-next-line security/no-inline-assembly | ||||
|         assembly { | ||||
|             success := staticcall(sub(gas(), 2000), 6, input, 0x80, r, 0x40) | ||||
|             // Use "invalid" to make gas estimation work | ||||
|             switch success | ||||
|             case 0 { | ||||
|                 invalid() | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         require(success, "ec-add-failed"); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @notice an optimized ecMul implementation that takes O(log_2(s)) ecAdds | ||||
|      * @param p the point to multiply | ||||
|      * @param s the scalar to multiply by | ||||
|      * @dev this function is only safe to use if the scalar is 9 bits or less | ||||
|      */ | ||||
|     function scalar_mul_tiny(BN254.G1Point memory p, uint16 s) internal view returns (BN254.G1Point memory) { | ||||
|         require(s < 2 ** 9, "scalar-too-large"); | ||||
| 
 | ||||
|         // if s is 1 return p | ||||
|         if (s == 1) { | ||||
|             return p; | ||||
|         } | ||||
| 
 | ||||
|         // the accumulated product to return | ||||
|         BN254.G1Point memory acc = BN254.G1Point(0, 0); | ||||
|         // the 2^n*p to add to the accumulated product in each iteration | ||||
|         BN254.G1Point memory p2n = p; | ||||
|         // value of most significant bit | ||||
|         uint16 m = 1; | ||||
|         // index of most significant bit | ||||
|         uint8 i = 0; | ||||
| 
 | ||||
|         //loop until we reach the most significant bit | ||||
|         while (s >= m) { | ||||
|             unchecked { | ||||
|                 // if the  current bit is 1, add the 2^n*p to the accumulated product | ||||
|                 if ((s >> i) & 1 == 1) { | ||||
|                     acc = plus(acc, p2n); | ||||
|                 } | ||||
|                 // double the 2^n*p for the next iteration | ||||
|                 p2n = plus(p2n, p2n); | ||||
| 
 | ||||
|                 // increment the index and double the value of the most significant bit | ||||
|                 m <<= 1; | ||||
|                 ++i; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // return the accumulated product | ||||
|         return acc; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @return r the product of a point on G1 and a scalar, i.e. | ||||
|      *         p == p.scalar_mul(1) and p.plus(p) == p.scalar_mul(2) for all | ||||
|      *         points p. | ||||
|      */ | ||||
|     function scalar_mul(G1Point memory p, uint s) internal view returns (G1Point memory r) { | ||||
|         uint[3] memory input; | ||||
|         input[0] = p.X; | ||||
|         input[1] = p.Y; | ||||
|         input[2] = s; | ||||
|         bool success; | ||||
|         // solium-disable-next-line security/no-inline-assembly | ||||
|         assembly { | ||||
|             success := staticcall(sub(gas(), 2000), 7, input, 0x60, r, 0x40) | ||||
|             // Use "invalid" to make gas estimation work | ||||
|             switch success | ||||
|             case 0 { | ||||
|                 invalid() | ||||
|             } | ||||
|         } | ||||
|         require(success, "ec-mul-failed"); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      *  @return The result of computing the pairing check | ||||
|      *         e(p1[0], p2[0]) *  .... * e(p1[n], p2[n]) == 1 | ||||
|      *         For example, | ||||
|      *         pairing([P1(), P1().negate()], [P2(), P2()]) should return true. | ||||
|      */ | ||||
|     function pairing( | ||||
|         G1Point memory a1, | ||||
|         G2Point memory a2, | ||||
|         G1Point memory b1, | ||||
|         G2Point memory b2 | ||||
|     ) internal view returns (bool) { | ||||
|         G1Point[2] memory p1 = [a1, b1]; | ||||
|         G2Point[2] memory p2 = [a2, b2]; | ||||
| 
 | ||||
|         uint[12] memory input; | ||||
| 
 | ||||
|         for (uint i = 0; i < 2; i++) { | ||||
|             uint j = i * 6; | ||||
|             input[j + 0] = p1[i].X; | ||||
|             input[j + 1] = p1[i].Y; | ||||
|             input[j + 2] = p2[i].X[0]; | ||||
|             input[j + 3] = p2[i].X[1]; | ||||
|             input[j + 4] = p2[i].Y[0]; | ||||
|             input[j + 5] = p2[i].Y[1]; | ||||
|         } | ||||
| 
 | ||||
|         uint[1] memory out; | ||||
|         bool success; | ||||
| 
 | ||||
|         // solium-disable-next-line security/no-inline-assembly | ||||
|         assembly { | ||||
|             success := staticcall(sub(gas(), 2000), 8, input, mul(12, 0x20), out, 0x20) | ||||
|             // Use "invalid" to make gas estimation work | ||||
|             switch success | ||||
|             case 0 { | ||||
|                 invalid() | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         require(success, "pairing-opcode-failed"); | ||||
| 
 | ||||
|         return out[0] != 0; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @notice This function is functionally the same as pairing(), however it specifies a gas limit | ||||
|      *         the user can set, as a precompile may use the entire gas budget if it reverts. | ||||
|      */ | ||||
|     function safePairing( | ||||
|         G1Point memory a1, | ||||
|         G2Point memory a2, | ||||
|         G1Point memory b1, | ||||
|         G2Point memory b2, | ||||
|         uint pairingGas | ||||
|     ) internal view returns (bool, bool) { | ||||
|         G1Point[2] memory p1 = [a1, b1]; | ||||
|         G2Point[2] memory p2 = [a2, b2]; | ||||
| 
 | ||||
|         uint[12] memory input; | ||||
| 
 | ||||
|         for (uint i = 0; i < 2; i++) { | ||||
|             uint j = i * 6; | ||||
|             input[j + 0] = p1[i].X; | ||||
|             input[j + 1] = p1[i].Y; | ||||
|             input[j + 2] = p2[i].X[0]; | ||||
|             input[j + 3] = p2[i].X[1]; | ||||
|             input[j + 4] = p2[i].Y[0]; | ||||
|             input[j + 5] = p2[i].Y[1]; | ||||
|         } | ||||
| 
 | ||||
|         uint[1] memory out; | ||||
|         bool success; | ||||
| 
 | ||||
|         // solium-disable-next-line security/no-inline-assembly | ||||
|         assembly { | ||||
|             success := staticcall(pairingGas, 8, input, mul(12, 0x20), out, 0x20) | ||||
|         } | ||||
| 
 | ||||
|         //Out is the output of the pairing precompile, either 0 or 1 based on whether the two pairings are equal. | ||||
|         //Success is true if the precompile actually goes through (aka all inputs are valid) | ||||
| 
 | ||||
|         return (success, out[0] != 0); | ||||
|     } | ||||
| 
 | ||||
|     /// @return hashedG1 the keccak256 hash of the G1 Point | ||||
|     /// @dev used for BLS signatures | ||||
|     function hashG1Point(BN254.G1Point memory pk) internal pure returns (bytes32 hashedG1) { | ||||
|         assembly { | ||||
|             mstore(0, mload(pk)) | ||||
|             mstore(0x20, mload(add(0x20, pk))) | ||||
|             hashedG1 := keccak256(0, 0x40) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /// @return the keccak256 hash of the G2 Point | ||||
|     /// @dev used for BLS signatures | ||||
|     function hashG2Point(BN254.G2Point memory pk) internal pure returns (bytes32) { | ||||
|         return keccak256(abi.encodePacked(pk.X[0], pk.X[1], pk.Y[0], pk.Y[1])); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @notice adapted from https://github.com/HarryR/solcrypto/blob/master/contracts/altbn128.sol | ||||
|      */ | ||||
|     function hashToG1(bytes32 _x) internal view returns (G1Point memory) { | ||||
|         uint beta = 0; | ||||
|         uint y = 0; | ||||
| 
 | ||||
|         uint x = uint(_x) % FP_MODULUS; | ||||
| 
 | ||||
|         while (true) { | ||||
|             (beta, y) = findYFromX(x); | ||||
| 
 | ||||
|             // y^2 == beta | ||||
|             if (beta == mulmod(y, y, FP_MODULUS)) { | ||||
|                 return G1Point(x, y); | ||||
|             } | ||||
| 
 | ||||
|             x = addmod(x, 1, FP_MODULUS); | ||||
|         } | ||||
|         return G1Point(0, 0); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Given X, find Y | ||||
|      * | ||||
|      *   where y = sqrt(x^3 + b) | ||||
|      * | ||||
|      * Returns: (x^3 + b), y | ||||
|      */ | ||||
|     function findYFromX(uint x) internal view returns (uint, uint) { | ||||
|         // beta = (x^3 + b) % p | ||||
|         uint beta = addmod(mulmod(mulmod(x, x, FP_MODULUS), x, FP_MODULUS), 3, FP_MODULUS); | ||||
| 
 | ||||
|         // y^2 = x^3 + b | ||||
|         // this acts like: y = sqrt(beta) = beta^((p+1) / 4) | ||||
|         uint y = expMod(beta, 0xc19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f52, FP_MODULUS); | ||||
| 
 | ||||
|         return (beta, y); | ||||
|     } | ||||
| 
 | ||||
|     function expMod(uint _base, uint _exponent, uint _modulus) internal view returns (uint retval) { | ||||
|         bool success; | ||||
|         uint[1] memory output; | ||||
|         uint[6] memory input; | ||||
|         input[0] = 0x20; // baseLen = new(big.Int).SetBytes(getData(input, 0, 32)) | ||||
|         input[1] = 0x20; // expLen  = new(big.Int).SetBytes(getData(input, 32, 32)) | ||||
|         input[2] = 0x20; // modLen  = new(big.Int).SetBytes(getData(input, 64, 32)) | ||||
|         input[3] = _base; | ||||
|         input[4] = _exponent; | ||||
|         input[5] = _modulus; | ||||
|         assembly { | ||||
|             success := staticcall(sub(gas(), 2000), 5, input, 0xc0, output, 0x20) | ||||
|             // Use "invalid" to make gas estimation work | ||||
|             switch success | ||||
|             case 0 { | ||||
|                 invalid() | ||||
|             } | ||||
|         } | ||||
|         require(success, "BN254.expMod: call failure"); | ||||
|         return output[0]; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // File contracts/interface/IDASigners.sol | ||||
| 
 | ||||
| // Original license: SPDX_License_Identifier: LGPL-3.0-only | ||||
| 
 | ||||
| pragma solidity >=0.8.0 <0.9.0; | ||||
| 
 | ||||
| interface IDASigners { | ||||
|     /*=== struct ===*/ | ||||
|     struct SignerDetail { | ||||
|         string socket; | ||||
|         BN254.G1Point pkG1; | ||||
|         BN254.G2Point pkG2; | ||||
|     } | ||||
| 
 | ||||
|     /*=== event ===*/ | ||||
|     event NewSigner(address indexed signer, BN254.G1Point pkG1, BN254.G2Point pkG2); | ||||
|     event SocketUpdated(address indexed signer, string socket); | ||||
| 
 | ||||
|     /*=== function ===*/ | ||||
|     function epochNumber() external view returns (uint); | ||||
| 
 | ||||
|     function getSigners(uint epoch) external view returns (address[] memory accounts, SignerDetail[] memory details); | ||||
| 
 | ||||
|     function registerSigner(SignerDetail memory _signer, BN254.G1Point memory _signature) external; | ||||
| 
 | ||||
|     function checkSignatures( | ||||
|         BN254.G1Point memory _hash, | ||||
|         uint epoch, | ||||
|         bytes memory signerBitmap, | ||||
|         BN254.G2Point memory _aggPkG2, | ||||
|         BN254.G1Point memory _signature | ||||
|     ) external view returns (bool); | ||||
| } | ||||
							
								
								
									
										678
									
								
								precompiles/dasigners/contract.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										678
									
								
								precompiles/dasigners/contract.go
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										108
									
								
								precompiles/dasigners/dasigners.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								precompiles/dasigners/dasigners.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,108 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	precopmiles_common "github.com/0glabs/0g-chain/precompiles/common" | ||||
| 	dasignerskeeper "github.com/0glabs/0g-chain/x/dasigners/v1/keeper" | ||||
| 	"github.com/ethereum/go-ethereum/accounts/abi" | ||||
| 	"github.com/ethereum/go-ethereum/common" | ||||
| 	"github.com/ethereum/go-ethereum/core/vm" | ||||
| 	"github.com/evmos/ethermint/x/evm/statedb" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	PrecompileAddress        = "0x0000000000000000000000000000000000001000" | ||||
| 	RequiredGasBasic  uint64 = 100 | ||||
| 
 | ||||
| 	DASignersFunctionEpochNumber       = "epochNumber" | ||||
| 	DASignersFunctionGetSigner         = "getSigner" | ||||
| 	DASignersFunctionGetSigners        = "getSigners" | ||||
| 	DASignersFunctionUpdateSocket      = "updateSocket" | ||||
| 	DASignersFunctionRegisterNextEpoch = "registerNextEpoch" | ||||
| 	DASignersFunctionRegisterSigner    = "registerSigner" | ||||
| 	DASignersFunctionGetAggPkG1        = "getAggPkG1" | ||||
| ) | ||||
| 
 | ||||
| var _ vm.PrecompiledContract = &DASignersPrecompile{} | ||||
| 
 | ||||
| type DASignersPrecompile struct { | ||||
| 	abi             abi.ABI | ||||
| 	dasignersKeeper dasignerskeeper.Keeper | ||||
| } | ||||
| 
 | ||||
| func NewDASignersPrecompile(dasignersKeeper dasignerskeeper.Keeper) (*DASignersPrecompile, error) { | ||||
| 	abi, err := abi.JSON(strings.NewReader(DASignersABI)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &DASignersPrecompile{ | ||||
| 		abi:             abi, | ||||
| 		dasignersKeeper: dasignersKeeper, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| // Address implements vm.PrecompiledContract.
 | ||||
| func (d *DASignersPrecompile) Address() common.Address { | ||||
| 	return common.HexToAddress(PrecompileAddress) | ||||
| } | ||||
| 
 | ||||
| // RequiredGas implements vm.PrecompiledContract.
 | ||||
| func (d *DASignersPrecompile) RequiredGas(input []byte) uint64 { | ||||
| 	return RequiredGasBasic | ||||
| } | ||||
| 
 | ||||
| // Run implements vm.PrecompiledContract.
 | ||||
| func (d *DASignersPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) { | ||||
| 	// parse input
 | ||||
| 	if len(contract.Input) < 4 { | ||||
| 		return nil, vm.ErrExecutionReverted | ||||
| 	} | ||||
| 	method, err := d.abi.MethodById(contract.Input[:4]) | ||||
| 	if err != nil { | ||||
| 		return nil, vm.ErrExecutionReverted | ||||
| 	} | ||||
| 	args, err := method.Inputs.Unpack(contract.Input[4:]) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// get state db and context
 | ||||
| 	stateDB, ok := evm.StateDB.(*statedb.StateDB) | ||||
| 	if !ok { | ||||
| 		return nil, fmt.Errorf(precopmiles_common.ErrGetStateDB) | ||||
| 	} | ||||
| 	ctx := stateDB.GetContext() | ||||
| 	initialGas := ctx.GasMeter().GasConsumed() | ||||
| 
 | ||||
| 	var bz []byte | ||||
| 	switch method.Name { | ||||
| 	// queries
 | ||||
| 	case DASignersFunctionEpochNumber: | ||||
| 		bz, err = d.EpochNumber(ctx, evm, method, args) | ||||
| 	case DASignersFunctionGetSigner: | ||||
| 		bz, err = d.GetSigner(ctx, evm, method, args) | ||||
| 	case DASignersFunctionGetSigners: | ||||
| 		bz, err = d.GetSigners(ctx, evm, method, args) | ||||
| 	case DASignersFunctionGetAggPkG1: | ||||
| 		bz, err = d.GetAggPkG1(ctx, evm, method, args) | ||||
| 	// txs
 | ||||
| 	case DASignersFunctionRegisterSigner: | ||||
| 		bz, err = d.RegisterSigner(ctx, evm, stateDB, method, args) | ||||
| 	case DASignersFunctionRegisterNextEpoch: | ||||
| 		bz, err = d.RegisterNextEpoch(ctx, evm, stateDB, method, args) | ||||
| 	case DASignersFunctionUpdateSocket: | ||||
| 		bz, err = d.UpdateSocket(ctx, evm, stateDB, method, args) | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	cost := ctx.GasMeter().GasConsumed() - initialGas | ||||
| 
 | ||||
| 	if !contract.UseGas(cost) { | ||||
| 		return nil, vm.ErrOutOfGas | ||||
| 	} | ||||
| 	return bz, nil | ||||
| } | ||||
							
								
								
									
										5
									
								
								precompiles/dasigners/errors.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								precompiles/dasigners/errors.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| const ( | ||||
| 	ErrInvalidSender = "sender address %s is not the same as signer address %s" | ||||
| ) | ||||
							
								
								
									
										58
									
								
								precompiles/dasigners/events.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								precompiles/dasigners/events.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| import ( | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/ethereum/go-ethereum/accounts/abi" | ||||
| 	"github.com/ethereum/go-ethereum/common" | ||||
| 	"github.com/ethereum/go-ethereum/core/types" | ||||
| 	"github.com/evmos/ethermint/x/evm/statedb" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	NewSignerEvent     = "NewSigner" | ||||
| 	SocketUpdatedEvent = "SocketUpdated" | ||||
| ) | ||||
| 
 | ||||
| func (d *DASignersPrecompile) EmitNewSignerEvent(ctx sdk.Context, stateDB *statedb.StateDB, signer IDASignersSignerDetail) error { | ||||
| 	event := d.abi.Events[NewSignerEvent] | ||||
| 	quries := make([]interface{}, 2) | ||||
| 	quries[0] = event.ID | ||||
| 	quries[1] = signer.Signer | ||||
| 	topics, err := abi.MakeTopics(quries) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	b, err := event.Inputs.Pack(signer.Signer, signer.PkG1, signer.PkG2) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	stateDB.AddLog(&types.Log{ | ||||
| 		Address:     d.Address(), | ||||
| 		Topics:      topics[0], | ||||
| 		Data:        b, | ||||
| 		BlockNumber: uint64(ctx.BlockHeight()), | ||||
| 	}) | ||||
| 	return d.EmitSocketUpdatedEvent(ctx, stateDB, signer.Signer, signer.Socket) | ||||
| } | ||||
| 
 | ||||
| func (d *DASignersPrecompile) EmitSocketUpdatedEvent(ctx sdk.Context, stateDB *statedb.StateDB, signer common.Address, socket string) error { | ||||
| 	event := d.abi.Events[SocketUpdatedEvent] | ||||
| 	quries := make([]interface{}, 2) | ||||
| 	quries[0] = event.ID | ||||
| 	quries[1] = signer | ||||
| 	topics, err := abi.MakeTopics(quries) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	b, err := event.Inputs.Pack(signer, socket) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	stateDB.AddLog(&types.Log{ | ||||
| 		Address:     d.Address(), | ||||
| 		Topics:      topics[0], | ||||
| 		Data:        b, | ||||
| 		BlockNumber: uint64(ctx.BlockHeight()), | ||||
| 	}) | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										57
									
								
								precompiles/dasigners/query.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								precompiles/dasigners/query.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| import ( | ||||
| 	"math/big" | ||||
| 
 | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/ethereum/go-ethereum/accounts/abi" | ||||
| 	"github.com/ethereum/go-ethereum/core/vm" | ||||
| ) | ||||
| 
 | ||||
| func (d *DASignersPrecompile) EpochNumber(ctx sdk.Context, _ *vm.EVM, method *abi.Method, _ []interface{}) ([]byte, error) { | ||||
| 	epochNumber, err := d.dasignersKeeper.GetEpochNumber(ctx) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return method.Outputs.Pack(big.NewInt(int64(epochNumber))) | ||||
| } | ||||
| 
 | ||||
| func (d *DASignersPrecompile) GetSigner(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) { | ||||
| 	req, err := NewQuerySignerRequest(args) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	response, err := d.dasignersKeeper.Signer(sdk.WrapSDKContext(ctx), req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return method.Outputs.Pack(NewIDASignersSignerDetail(response.Signer)) | ||||
| } | ||||
| 
 | ||||
| func (d *DASignersPrecompile) GetSigners(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) { | ||||
| 	req, err := NewQueryEpochSignerSetRequest(args) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	response, err := d.dasignersKeeper.EpochSignerSet(sdk.WrapSDKContext(ctx), req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	signers := make([]IDASignersSignerDetail, 0) | ||||
| 	for _, signer := range response.Signers { | ||||
| 		signers = append(signers, NewIDASignersSignerDetail(signer)) | ||||
| 	} | ||||
| 	return method.Outputs.Pack(signers) | ||||
| } | ||||
| 
 | ||||
| func (d *DASignersPrecompile) GetAggPkG1(ctx sdk.Context, _ *vm.EVM, method *abi.Method, args []interface{}) ([]byte, error) { | ||||
| 	req, err := NewQueryAggregatePubkeyG1Request(args) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	response, err := d.dasignersKeeper.AggregatePubkeyG1(sdk.WrapSDKContext(ctx), req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return method.Outputs.Pack(NewBN254G1Point(response.AggregatePubkeyG1)) | ||||
| } | ||||
							
								
								
									
										64
									
								
								precompiles/dasigners/tx.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								precompiles/dasigners/tx.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/ethereum/go-ethereum/accounts/abi" | ||||
| 	"github.com/ethereum/go-ethereum/core/vm" | ||||
| 	"github.com/evmos/ethermint/x/evm/statedb" | ||||
| ) | ||||
| 
 | ||||
| func (d *DASignersPrecompile) RegisterSigner(ctx sdk.Context, evm *vm.EVM, stateDB *statedb.StateDB, method *abi.Method, args []interface{}) ([]byte, error) { | ||||
| 	msg, err := NewMsgRegisterSigner(args) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// validation
 | ||||
| 	sender := ToLowerHexWithoutPrefix(evm.Origin) | ||||
| 	if sender != msg.Signer.Account { | ||||
| 		return nil, fmt.Errorf(ErrInvalidSender, sender, msg.Signer.Account) | ||||
| 	} | ||||
| 	// execute
 | ||||
| 	_, err = d.dasignersKeeper.RegisterSigner(sdk.WrapSDKContext(ctx), msg) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// emit events
 | ||||
| 	err = d.EmitNewSignerEvent(ctx, stateDB, args[0].(IDASignersSignerDetail)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return method.Outputs.Pack() | ||||
| } | ||||
| 
 | ||||
| func (d *DASignersPrecompile) RegisterNextEpoch(ctx sdk.Context, evm *vm.EVM, stateDB *statedb.StateDB, method *abi.Method, args []interface{}) ([]byte, error) { | ||||
| 	msg, err := NewMsgRegisterNextEpoch(args, ToLowerHexWithoutPrefix(evm.Origin)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// execute
 | ||||
| 	_, err = d.dasignersKeeper.RegisterNextEpoch(sdk.WrapSDKContext(ctx), msg) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return method.Outputs.Pack() | ||||
| } | ||||
| 
 | ||||
| func (d *DASignersPrecompile) UpdateSocket(ctx sdk.Context, evm *vm.EVM, stateDB *statedb.StateDB, method *abi.Method, args []interface{}) ([]byte, error) { | ||||
| 	msg, err := NewMsgUpdateSocket(args, ToLowerHexWithoutPrefix(evm.Origin)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// execute
 | ||||
| 	_, err = d.dasignersKeeper.UpdateSocket(sdk.WrapSDKContext(ctx), msg) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	// emit events
 | ||||
| 	err = d.EmitSocketUpdatedEvent(ctx, stateDB, evm.Origin, args[0].(string)) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return method.Outputs.Pack() | ||||
| } | ||||
							
								
								
									
										130
									
								
								precompiles/dasigners/types.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								precompiles/dasigners/types.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,130 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"math/big" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	precopmiles_common "github.com/0glabs/0g-chain/precompiles/common" | ||||
| 	dasignerstypes "github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| 	"github.com/ethereum/go-ethereum/common" | ||||
| ) | ||||
| 
 | ||||
| func NewBN254G1Point(b []byte) BN254G1Point { | ||||
| 	return BN254G1Point{ | ||||
| 		X: new(big.Int).SetBytes(b[:32]), | ||||
| 		Y: new(big.Int).SetBytes(b[32:64]), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (p BN254G1Point) Serialize() []byte { | ||||
| 	b := make([]byte, 0) | ||||
| 	b = append(b, common.LeftPadBytes(p.X.Bytes(), 32)...) | ||||
| 	b = append(b, common.LeftPadBytes(p.Y.Bytes(), 32)...) | ||||
| 	return b | ||||
| } | ||||
| 
 | ||||
| func NewBN254G2Point(b []byte) BN254G2Point { | ||||
| 	return BN254G2Point{ | ||||
| 		X: [2]*big.Int{ | ||||
| 			new(big.Int).SetBytes(b[:32]), | ||||
| 			new(big.Int).SetBytes(b[32:64]), | ||||
| 		}, | ||||
| 		Y: [2]*big.Int{ | ||||
| 			new(big.Int).SetBytes(b[64:96]), | ||||
| 			new(big.Int).SetBytes(b[96:128]), | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (p BN254G2Point) Serialize() []byte { | ||||
| 	b := make([]byte, 0) | ||||
| 	b = append(b, common.LeftPadBytes(p.X[0].Bytes(), 32)...) | ||||
| 	b = append(b, common.LeftPadBytes(p.X[1].Bytes(), 32)...) | ||||
| 	b = append(b, common.LeftPadBytes(p.Y[0].Bytes(), 32)...) | ||||
| 	b = append(b, common.LeftPadBytes(p.Y[1].Bytes(), 32)...) | ||||
| 	return b | ||||
| } | ||||
| 
 | ||||
| func NewQuerySignerRequest(args []interface{}) (*dasignerstypes.QuerySignerRequest, error) { | ||||
| 	if len(args) != 1 { | ||||
| 		return nil, fmt.Errorf(precopmiles_common.ErrInvalidNumberOfArgs, 1, len(args)) | ||||
| 	} | ||||
| 
 | ||||
| 	return &dasignerstypes.QuerySignerRequest{ | ||||
| 		Account: args[0].(string), | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func NewQueryEpochSignerSetRequest(args []interface{}) (*dasignerstypes.QueryEpochSignerSetRequest, error) { | ||||
| 	if len(args) != 1 { | ||||
| 		return nil, fmt.Errorf(precopmiles_common.ErrInvalidNumberOfArgs, 1, len(args)) | ||||
| 	} | ||||
| 
 | ||||
| 	return &dasignerstypes.QueryEpochSignerSetRequest{ | ||||
| 		EpochNumber: args[0].(*big.Int).Uint64(), | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func NewQueryAggregatePubkeyG1Request(args []interface{}) (*dasignerstypes.QueryAggregatePubkeyG1Request, error) { | ||||
| 	if len(args) != 2 { | ||||
| 		return nil, fmt.Errorf(precopmiles_common.ErrInvalidNumberOfArgs, 2, len(args)) | ||||
| 	} | ||||
| 
 | ||||
| 	return &dasignerstypes.QueryAggregatePubkeyG1Request{ | ||||
| 		EpochNumber:   args[0].(*big.Int).Uint64(), | ||||
| 		SignersBitmap: args[1].([]byte), | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func NewIDASignersSignerDetail(signer *dasignerstypes.Signer) IDASignersSignerDetail { | ||||
| 	return IDASignersSignerDetail{ | ||||
| 		Signer: common.HexToAddress(signer.Account), | ||||
| 		Socket: signer.Socket, | ||||
| 		PkG1:   NewBN254G1Point(signer.PubkeyG1), | ||||
| 		PkG2:   NewBN254G2Point(signer.PubkeyG2), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func ToLowerHexWithoutPrefix(addr common.Address) string { | ||||
| 	return strings.ToLower(addr.Hex()[2:]) | ||||
| } | ||||
| 
 | ||||
| func NewMsgRegisterSigner(args []interface{}) (*dasignerstypes.MsgRegisterSigner, error) { | ||||
| 	if len(args) != 2 { | ||||
| 		return nil, fmt.Errorf(precopmiles_common.ErrInvalidNumberOfArgs, 2, len(args)) | ||||
| 	} | ||||
| 
 | ||||
| 	signer := args[0].(IDASignersSignerDetail) | ||||
| 	return &dasignerstypes.MsgRegisterSigner{ | ||||
| 		Signer: &dasignerstypes.Signer{ | ||||
| 			Account:  ToLowerHexWithoutPrefix(signer.Signer), | ||||
| 			Socket:   signer.Socket, | ||||
| 			PubkeyG1: signer.PkG1.Serialize(), | ||||
| 			PubkeyG2: signer.PkG2.Serialize(), | ||||
| 		}, | ||||
| 		Signature: args[1].(BN254G1Point).Serialize(), | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func NewMsgRegisterNextEpoch(args []interface{}, account string) (*dasignerstypes.MsgRegisterNextEpoch, error) { | ||||
| 	if len(args) != 1 { | ||||
| 		return nil, fmt.Errorf(precopmiles_common.ErrInvalidNumberOfArgs, 1, len(args)) | ||||
| 	} | ||||
| 
 | ||||
| 	return &dasignerstypes.MsgRegisterNextEpoch{ | ||||
| 		Account:   account, | ||||
| 		Signature: args[0].(BN254G1Point).Serialize(), | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
| func NewMsgUpdateSocket(args []interface{}, account string) (*dasignerstypes.MsgUpdateSocket, error) { | ||||
| 	if len(args) != 1 { | ||||
| 		return nil, fmt.Errorf(precopmiles_common.ErrInvalidNumberOfArgs, 1, len(args)) | ||||
| 	} | ||||
| 
 | ||||
| 	return &dasignerstypes.MsgUpdateSocket{ | ||||
| 		Account: account, | ||||
| 		Socket:  args[0].(string), | ||||
| 	}, nil | ||||
| } | ||||
| @ -28,7 +28,7 @@ message Council { | ||||
|   uint64 voting_start_height = 2; | ||||
|   uint64 start_height = 3; | ||||
|   uint64 end_height = 4; | ||||
|   repeated Vote votes = 5 [(gogoproto.nullable) = false];   | ||||
|   repeated Vote votes = 5 [(gogoproto.nullable) = false]; | ||||
|   repeated bytes members = 6 [ | ||||
|     (cosmos_proto.scalar) = "cosmos.AddressBytes", | ||||
|     (gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ValAddress" | ||||
|  | ||||
| @ -11,21 +11,21 @@ option (gogoproto.goproto_getters_all) = false; | ||||
| 
 | ||||
| // Msg defines the council Msg service | ||||
| service Msg { | ||||
|     rpc Register(MsgRegister) returns (MsgRegisterResponse); | ||||
|     rpc Vote(MsgVote) returns (MsgVoteResponse); | ||||
|   rpc Register(MsgRegister) returns (MsgRegisterResponse); | ||||
|   rpc Vote(MsgVote) returns (MsgVoteResponse); | ||||
| } | ||||
| 
 | ||||
| message MsgRegister { | ||||
|     string voter = 1; | ||||
|     bytes key = 2; | ||||
|   string voter = 1; | ||||
|   bytes key = 2; | ||||
| } | ||||
| 
 | ||||
| message MsgRegisterResponse {} | ||||
| 
 | ||||
| message MsgVote { | ||||
|     uint64 council_id = 1 [(gogoproto.customname) = "CouncilID"]; | ||||
|     string voter = 2; | ||||
|     repeated Ballot ballots = 3; | ||||
|   uint64 council_id = 1 [(gogoproto.customname) = "CouncilID"]; | ||||
|   string voter = 2; | ||||
|   repeated Ballot ballots = 3; | ||||
| } | ||||
| 
 | ||||
| message MsgVoteResponse {} | ||||
|  | ||||
							
								
								
									
										25
									
								
								proto/zgc/dasigners/v1/dasigners.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								proto/zgc/dasigners/v1/dasigners.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| syntax = "proto3"; | ||||
| package zgc.dasigners.v1; | ||||
| 
 | ||||
| import "cosmos_proto/cosmos.proto"; | ||||
| import "gogoproto/gogo.proto"; | ||||
| import "google/protobuf/any.proto"; | ||||
| import "google/protobuf/duration.proto"; | ||||
| 
 | ||||
| option go_package = "github.com/0glabs/0g-chain/x/dasigners/v1/types"; | ||||
| option (gogoproto.goproto_getters_all) = false; | ||||
| 
 | ||||
| message Signer { | ||||
|   // account defines the hex address of signer without 0x | ||||
|   string account = 1; | ||||
|   // socket defines the da node socket address | ||||
|   string socket = 2; | ||||
|   // pubkey_g1 defines the public key on bn254 G1 | ||||
|   bytes pubkey_g1 = 3; | ||||
|   // pubkey_g1 defines the public key on bn254 G2 | ||||
|   bytes pubkey_g2 = 4; | ||||
| } | ||||
| 
 | ||||
| message EpochSignerSet { | ||||
|   repeated string signers = 1; | ||||
| } | ||||
							
								
								
									
										29
									
								
								proto/zgc/dasigners/v1/genesis.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								proto/zgc/dasigners/v1/genesis.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| syntax = "proto3"; | ||||
| package zgc.dasigners.v1; | ||||
| 
 | ||||
| import "cosmos_proto/cosmos.proto"; | ||||
| import "gogoproto/gogo.proto"; | ||||
| import "google/protobuf/any.proto"; | ||||
| import "google/protobuf/timestamp.proto"; | ||||
| import "zgc/dasigners/v1/dasigners.proto"; | ||||
| 
 | ||||
| option go_package = "github.com/0glabs/0g-chain/x/dasigners/v1/types"; | ||||
| 
 | ||||
| message Params { | ||||
|   uint64 quorum_size = 1; | ||||
|   string tokens_per_vote = 2; | ||||
|   uint64 max_votes = 3; | ||||
|   uint64 epoch_blocks = 4; | ||||
| } | ||||
| 
 | ||||
| // GenesisState defines the dasigners module's genesis state. | ||||
| message GenesisState { | ||||
|   // params defines all the parameters of related to deposit. | ||||
|   Params params = 1 [(gogoproto.nullable) = false]; | ||||
|   // params epoch_number the epoch number | ||||
|   uint64 epoch_number = 2; | ||||
|   // signers defines all signers information | ||||
|   repeated Signer signers = 3; | ||||
|   // signers_by_epoch defines chosen signers by epoch | ||||
|   repeated EpochSignerSet signers_by_epoch = 4; | ||||
| } | ||||
							
								
								
									
										59
									
								
								proto/zgc/dasigners/v1/query.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								proto/zgc/dasigners/v1/query.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| syntax = "proto3"; | ||||
| package zgc.dasigners.v1; | ||||
| 
 | ||||
| import "cosmos_proto/cosmos.proto"; | ||||
| import "gogoproto/gogo.proto"; | ||||
| import "google/api/annotations.proto"; | ||||
| import "google/protobuf/any.proto"; | ||||
| import "google/protobuf/timestamp.proto"; | ||||
| import "zgc/dasigners/v1/dasigners.proto"; | ||||
| 
 | ||||
| option go_package = "github.com/0glabs/0g-chain/x/dasigners/v1/types"; | ||||
| option (gogoproto.goproto_getters_all) = false; | ||||
| 
 | ||||
| // Query defines the gRPC querier service for the dasigners module | ||||
| service Query { | ||||
|   rpc EpochNumber(QueryEpochNumberRequest) returns (QueryEpochNumberResponse) { | ||||
|     option (google.api.http).get = "/0gchain/dasigners/v1/epoch-number"; | ||||
|   } | ||||
|   rpc EpochSignerSet(QueryEpochSignerSetRequest) returns (QueryEpochSignerSetResponse) { | ||||
|     option (google.api.http).get = "/0gchain/dasigners/v1/epoch-signer-set"; | ||||
|   } | ||||
|   rpc AggregatePubkeyG1(QueryAggregatePubkeyG1Request) returns (QueryAggregatePubkeyG1Response) { | ||||
|     option (google.api.http).get = "/0gchain/dasigners/v1/aggregate-pubkey-g1"; | ||||
|   } | ||||
|   rpc Signer(QuerySignerRequest) returns (QuerySignerResponse) { | ||||
|     option (google.api.http).get = "/0gchain/dasigners/v1/signer"; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| message QuerySignerRequest { | ||||
|   string account = 1; | ||||
| } | ||||
| 
 | ||||
| message QuerySignerResponse { | ||||
|   Signer signer = 1; | ||||
| } | ||||
| 
 | ||||
| message QueryEpochNumberRequest {} | ||||
| 
 | ||||
| message QueryEpochNumberResponse { | ||||
|   uint64 epoch_number = 1; | ||||
| } | ||||
| 
 | ||||
| message QueryEpochSignerSetRequest { | ||||
|   uint64 epoch_number = 1; | ||||
| } | ||||
| 
 | ||||
| message QueryEpochSignerSetResponse { | ||||
|   repeated Signer signers = 1; | ||||
| } | ||||
| 
 | ||||
| message QueryAggregatePubkeyG1Request { | ||||
|   uint64 epoch_number = 1; | ||||
|   bytes signersBitmap = 2; | ||||
| } | ||||
| 
 | ||||
| message QueryAggregatePubkeyG1Response { | ||||
|   bytes aggregate_pubkey_g1 = 1; | ||||
| } | ||||
							
								
								
									
										39
									
								
								proto/zgc/dasigners/v1/tx.proto
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								proto/zgc/dasigners/v1/tx.proto
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| syntax = "proto3"; | ||||
| package zgc.dasigners.v1; | ||||
| 
 | ||||
| import "cosmos_proto/cosmos.proto"; | ||||
| import "gogoproto/gogo.proto"; | ||||
| import "google/protobuf/any.proto"; | ||||
| import "zgc/das/v1/genesis.proto"; | ||||
| import "zgc/dasigners/v1/dasigners.proto"; | ||||
| 
 | ||||
| option go_package = "github.com/0glabs/0g-chain/x/dasigners/v1/types"; | ||||
| option (gogoproto.goproto_getters_all) = false; | ||||
| 
 | ||||
| // Msg defines the dasigners Msg service | ||||
| service Msg { | ||||
|   rpc RegisterSigner(MsgRegisterSigner) returns (MsgRegisterSignerResponse); | ||||
|   rpc UpdateSocket(MsgUpdateSocket) returns (MsgUpdateSocketResponse); | ||||
|   rpc RegisterNextEpoch(MsgRegisterNextEpoch) returns (MsgRegisterNextEpochResponse); | ||||
| } | ||||
| 
 | ||||
| message MsgRegisterSigner { | ||||
|   Signer signer = 1; | ||||
|   bytes signature = 2; | ||||
| } | ||||
| 
 | ||||
| message MsgRegisterSignerResponse {} | ||||
| 
 | ||||
| message MsgUpdateSocket { | ||||
|   string account = 1; | ||||
|   string socket = 2; | ||||
| } | ||||
| 
 | ||||
| message MsgUpdateSocketResponse {} | ||||
| 
 | ||||
| message MsgRegisterNextEpoch { | ||||
|   string account = 1; | ||||
|   bytes signature = 2; | ||||
| } | ||||
| 
 | ||||
| message MsgRegisterNextEpochResponse {} | ||||
| @ -13,7 +13,7 @@ type KvtoolRunnerConfig struct { | ||||
| 	ImageTag   string | ||||
| 	IncludeIBC bool | ||||
| 
 | ||||
| 	EnableAutomatedUpgrade  bool | ||||
| 	EnableAutomatedUpgrade     bool | ||||
| 	ZgChainUpgradeName         string | ||||
| 	ZgChainUpgradeHeight       int64 | ||||
| 	ZgChainUpgradeBaseImageTag string | ||||
|  | ||||
| @ -142,8 +142,8 @@ func (chain *Chain) AddNewSigningAccountFromPrivKey( | ||||
| 		evmResChan: evmResChan, | ||||
| 
 | ||||
| 		zgChainSigner: zgChainSigner, | ||||
| 		sdkReqChan: sdkReqChan, | ||||
| 		sdkResChan: sdkResChan, | ||||
| 		sdkReqChan:    sdkReqChan, | ||||
| 		sdkResChan:    sdkResChan, | ||||
| 
 | ||||
| 		EvmAuth: evmSigner.Auth, | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										57
									
								
								x/dasigners/v1/client/cli/query.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								x/dasigners/v1/client/cli/query.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/spf13/cobra" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| 	"github.com/cosmos/cosmos-sdk/client" | ||||
| 	"github.com/cosmos/cosmos-sdk/client/flags" | ||||
| ) | ||||
| 
 | ||||
| // GetQueryCmd returns the cli query commands for the inflation module.
 | ||||
| func GetQueryCmd() *cobra.Command { | ||||
| 	cmd := &cobra.Command{ | ||||
| 		Use:                        types.ModuleName, | ||||
| 		Short:                      "Querying commands for the dasigners module", | ||||
| 		DisableFlagParsing:         true, | ||||
| 		SuggestionsMinimumDistance: 2, | ||||
| 		RunE:                       client.ValidateCmd, | ||||
| 	} | ||||
| 
 | ||||
| 	cmd.AddCommand( | ||||
| 		GetEpochNumber(), | ||||
| 	) | ||||
| 
 | ||||
| 	return cmd | ||||
| } | ||||
| 
 | ||||
| func GetEpochNumber() *cobra.Command { | ||||
| 	cmd := &cobra.Command{ | ||||
| 		Use:   "epoch-number", | ||||
| 		Short: "Query current epoch number", | ||||
| 		Args:  cobra.NoArgs, | ||||
| 		RunE: func(cmd *cobra.Command, _ []string) error { | ||||
| 			clientCtx, err := client.GetClientQueryContext(cmd) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 			queryClient := types.NewQueryClient(clientCtx) | ||||
| 
 | ||||
| 			params := &types.QueryEpochNumberRequest{} | ||||
| 			res, err := queryClient.EpochNumber(context.Background(), params) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 
 | ||||
| 			return clientCtx.PrintString(fmt.Sprintf("%v\n", res.EpochNumber)) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	flags.AddQueryFlagsToCmd(cmd) | ||||
| 
 | ||||
| 	return cmd | ||||
| } | ||||
							
								
								
									
										22
									
								
								x/dasigners/v1/client/cli/tx.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								x/dasigners/v1/client/cli/tx.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| package cli | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/x/das/v1/types" | ||||
| 	"github.com/cosmos/cosmos-sdk/client" | ||||
| 	"github.com/spf13/cobra" | ||||
| ) | ||||
| 
 | ||||
| // GetTxCmd returns the transaction commands for this module
 | ||||
| func GetTxCmd() *cobra.Command { | ||||
| 	cmd := &cobra.Command{ | ||||
| 		Use:                        types.ModuleName, | ||||
| 		Short:                      fmt.Sprintf("%s transactions subcommands", types.ModuleName), | ||||
| 		DisableFlagParsing:         true, | ||||
| 		SuggestionsMinimumDistance: 2, | ||||
| 		RunE:                       client.ValidateCmd, | ||||
| 	} | ||||
| 	cmd.AddCommand() | ||||
| 	return cmd | ||||
| } | ||||
							
								
								
									
										50
									
								
								x/dasigners/v1/genesis.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								x/dasigners/v1/genesis.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/keeper" | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| ) | ||||
| 
 | ||||
| // InitGenesis initializes the store state from a genesis state.
 | ||||
| func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, gs types.GenesisState) { | ||||
| 	if err := gs.Validate(); err != nil { | ||||
| 		panic(fmt.Sprintf("failed to validate %s genesis state: %s", types.ModuleName, err)) | ||||
| 	} | ||||
| 	keeper.SetEpochNumber(ctx, gs.EpochNumber) | ||||
| 	for _, signer := range gs.Signers { | ||||
| 		if err := keeper.SetSigner(ctx, *signer); err != nil { | ||||
| 			panic(fmt.Sprintf("failed to write genesis state into store: %s", err)) | ||||
| 		} | ||||
| 	} | ||||
| 	for epoch, signers := range gs.SignersByEpoch { | ||||
| 		keeper.SetEpochSignerSet(ctx, uint64(epoch), *signers) | ||||
| 	} | ||||
| 	keeper.SetParams(ctx, gs.Params) | ||||
| } | ||||
| 
 | ||||
| // ExportGenesis returns a GenesisState for a given context and keeper.
 | ||||
| func ExportGenesis(ctx sdk.Context, keeper keeper.Keeper) *types.GenesisState { | ||||
| 	params := keeper.GetParams(ctx) | ||||
| 	epochNumber, err := keeper.GetEpochNumber(ctx) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	signers := make([]*types.Signer, 0) | ||||
| 	keeper.IterateSigners(ctx, func(_ int64, signer types.Signer) (stop bool) { | ||||
| 		signers = append(signers, &signer) | ||||
| 		return false | ||||
| 	}) | ||||
| 	epochSignerSets := make([]*types.EpochSignerSet, 0) | ||||
| 	for i := 0; i < int(epochNumber); i += 1 { | ||||
| 		epochSignerSet, found := keeper.GetEpochSignerSet(ctx, uint64(i)) | ||||
| 		if !found { | ||||
| 			panic("historical epoch signer set not found") | ||||
| 		} | ||||
| 		epochSignerSets = append(epochSignerSets, &epochSignerSet) | ||||
| 	} | ||||
| 	return types.NewGenesisState(params, epochNumber, signers, epochSignerSets) | ||||
| } | ||||
							
								
								
									
										88
									
								
								x/dasigners/v1/keeper/abci.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								x/dasigners/v1/keeper/abci.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,88 @@ | ||||
| package keeper | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"math/big" | ||||
| 	"sort" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/ethereum/go-ethereum/crypto" | ||||
| 	abci "github.com/tendermint/tendermint/abci/types" | ||||
| ) | ||||
| 
 | ||||
| type Ballot struct { | ||||
| 	account string | ||||
| 	content []byte | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) { | ||||
| 	epochNumber, err := k.GetEpochNumber(ctx) | ||||
| 	if err != nil { | ||||
| 		k.Logger(ctx).Error("[BeginBlock] cannot get epoch number") | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	params := k.GetParams(ctx) | ||||
| 	expectedEpoch := uint64(ctx.BlockHeight()) / params.EpochBlocks | ||||
| 	if expectedEpoch == epochNumber { | ||||
| 		return | ||||
| 	} | ||||
| 	if expectedEpoch > epochNumber+1 || expectedEpoch < epochNumber { | ||||
| 		panic("block height is not continuous") | ||||
| 	} | ||||
| 	// new epoch
 | ||||
| 	registrations := []Ballot{} | ||||
| 	k.IterateRegistrations(ctx, expectedEpoch, func(account string, signature []byte) (stop bool) { | ||||
| 		registrations = append(registrations, Ballot{ | ||||
| 			account: account, | ||||
| 			content: signature, | ||||
| 		}) | ||||
| 		return false | ||||
| 	}) | ||||
| 	ballots := []Ballot{} | ||||
| 	tokensPerVote, ok := sdk.NewIntFromString(params.TokensPerVote) | ||||
| 	if !ok { | ||||
| 		panic("failed to load params tokens_per_vote") | ||||
| 	} | ||||
| 	for _, registration := range registrations { | ||||
| 		// get validator
 | ||||
| 		valAddr, err := sdk.ValAddressFromHex(registration.account) | ||||
| 		if err != nil { | ||||
| 			k.Logger(ctx).Error("[BeginBlock] invalid account") | ||||
| 			continue | ||||
| 		} | ||||
| 		validator, found := k.stakingKeeper.GetValidator(ctx, valAddr) | ||||
| 		if !found { | ||||
| 			continue | ||||
| 		} | ||||
| 		num := validator.Tokens.Quo(sdk.NewInt(1_000_000_000_000_000_000)).Quo(tokensPerVote).Abs().BigInt() | ||||
| 		if num.Cmp(big.NewInt(int64(params.MaxVotes))) > 0 { | ||||
| 			num = big.NewInt(int64(params.MaxVotes)) | ||||
| 		} | ||||
| 		content := registration.content | ||||
| 		ballotNum := num.Int64() | ||||
| 		for j := 0; j < int(ballotNum); j += 1 { | ||||
| 			ballots = append(ballots, Ballot{ | ||||
| 				account: registration.account, | ||||
| 				content: content, | ||||
| 			}) | ||||
| 			content = crypto.Keccak256(content) | ||||
| 		} | ||||
| 	} | ||||
| 	sort.Slice(ballots, func(i, j int) bool { | ||||
| 		return bytes.Compare(ballots[i].content, ballots[j].content) < 0 | ||||
| 	}) | ||||
| 	chosen := make(map[string]struct{}) | ||||
| 	epochSignerSet := types.EpochSignerSet{ | ||||
| 		Signers: make([]string, 0), | ||||
| 	} | ||||
| 	for _, ballot := range ballots { | ||||
| 		if _, ok := chosen[ballot.account]; !ok { | ||||
| 			chosen[ballot.account] = struct{}{} | ||||
| 			epochSignerSet.Signers = append(epochSignerSet.Signers, ballot.account) | ||||
| 		} | ||||
| 	} | ||||
| 	// save to store
 | ||||
| 	k.SetEpochSignerSet(ctx, expectedEpoch, epochSignerSet) | ||||
| 	k.SetEpochNumber(ctx, expectedEpoch) | ||||
| } | ||||
							
								
								
									
										88
									
								
								x/dasigners/v1/keeper/grpc_query.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								x/dasigners/v1/keeper/grpc_query.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,88 @@ | ||||
| package keeper | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/crypto/bn254util" | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| 	"github.com/consensys/gnark-crypto/ecc/bn254" | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| ) | ||||
| 
 | ||||
| var _ types.QueryServer = Keeper{} | ||||
| 
 | ||||
| func (k Keeper) Signer( | ||||
| 	c context.Context, | ||||
| 	req *types.QuerySignerRequest, | ||||
| ) (*types.QuerySignerResponse, error) { | ||||
| 	ctx := sdk.UnwrapSDKContext(c) | ||||
| 	signer, found, err := k.GetSigner(ctx, req.Account) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if !found { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 	return &types.QuerySignerResponse{Signer: &signer}, nil | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) EpochNumber( | ||||
| 	c context.Context, | ||||
| 	_ *types.QueryEpochNumberRequest, | ||||
| ) (*types.QueryEpochNumberResponse, error) { | ||||
| 	ctx := sdk.UnwrapSDKContext(c) | ||||
| 	epochNumber, err := k.GetEpochNumber(ctx) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &types.QueryEpochNumberResponse{EpochNumber: epochNumber}, nil | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) EpochSignerSet(c context.Context, request *types.QueryEpochSignerSetRequest) (*types.QueryEpochSignerSetResponse, error) { | ||||
| 	ctx := sdk.UnwrapSDKContext(c) | ||||
| 	epochSignerSet := make([]*types.Signer, 0) | ||||
| 	signers, found := k.GetEpochSignerSet(ctx, request.EpochNumber) | ||||
| 	if !found { | ||||
| 		return &types.QueryEpochSignerSetResponse{Signers: epochSignerSet}, nil | ||||
| 	} | ||||
| 	for _, account := range signers.Signers { | ||||
| 		signer, found, err := k.GetSigner(ctx, account) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		if !found { | ||||
| 			return nil, types.ErrSignerNotFound | ||||
| 		} | ||||
| 		epochSignerSet = append(epochSignerSet, &signer) | ||||
| 	} | ||||
| 	return &types.QueryEpochSignerSetResponse{Signers: epochSignerSet}, nil | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) AggregatePubkeyG1(c context.Context, request *types.QueryAggregatePubkeyG1Request) (*types.QueryAggregatePubkeyG1Response, error) { | ||||
| 	ctx := sdk.UnwrapSDKContext(c) | ||||
| 	signers, found := k.GetEpochSignerSet(ctx, request.EpochNumber) | ||||
| 	if !found { | ||||
| 		return nil, types.ErrEpochSignerSetNotFound | ||||
| 	} | ||||
| 	if len(request.SignersBitmap) != (len(signers.Signers)+7)/8 { | ||||
| 		return nil, types.ErrSignerLengthNotMatch | ||||
| 	} | ||||
| 	aggPubkeyG1 := new(bn254.G1Affine) | ||||
| 	for i, account := range signers.Signers { | ||||
| 		b := request.SignersBitmap[i/8] & (1 << (i % 8)) | ||||
| 		if b == 0 { | ||||
| 			continue | ||||
| 		} | ||||
| 		signer, found, err := k.GetSigner(ctx, account) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		if !found { | ||||
| 			return nil, types.ErrSignerNotFound | ||||
| 		} | ||||
| 		aggPubkeyG1.Add(aggPubkeyG1, bn254util.DeserializeG1(signer.PubkeyG1)) | ||||
| 	} | ||||
| 	return &types.QueryAggregatePubkeyG1Response{ | ||||
| 		AggregatePubkeyG1: bn254util.SerializeG1(aggPubkeyG1), | ||||
| 	}, nil | ||||
| } | ||||
							
								
								
									
										181
									
								
								x/dasigners/v1/keeper/keeper.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								x/dasigners/v1/keeper/keeper.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,181 @@ | ||||
| package keeper | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 
 | ||||
| 	"github.com/cosmos/cosmos-sdk/codec" | ||||
| 	"github.com/cosmos/cosmos-sdk/store/prefix" | ||||
| 	storetypes "github.com/cosmos/cosmos-sdk/store/types" | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/tendermint/tendermint/libs/log" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| ) | ||||
| 
 | ||||
| type Keeper struct { | ||||
| 	storeKey      storetypes.StoreKey | ||||
| 	cdc           codec.BinaryCodec | ||||
| 	stakingKeeper types.StakingKeeper | ||||
| } | ||||
| 
 | ||||
| // NewKeeper creates a new das Keeper instance
 | ||||
| func NewKeeper( | ||||
| 	storeKey storetypes.StoreKey, | ||||
| 	cdc codec.BinaryCodec, | ||||
| 	stakingKeeper types.StakingKeeper, | ||||
| ) Keeper { | ||||
| 	return Keeper{ | ||||
| 		storeKey:      storeKey, | ||||
| 		cdc:           cdc, | ||||
| 		stakingKeeper: stakingKeeper, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Logger returns a module-specific logger.
 | ||||
| func (k Keeper) Logger(ctx sdk.Context) log.Logger { | ||||
| 	return ctx.Logger().With("module", "x/"+types.ModuleName) | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) GetParams(ctx sdk.Context) types.Params { | ||||
| 	store := ctx.KVStore(k.storeKey) | ||||
| 	bz := store.Get(types.ParamsKey) | ||||
| 	var params types.Params | ||||
| 	k.cdc.MustUnmarshal(bz, ¶ms) | ||||
| 	return params | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { | ||||
| 	store := ctx.KVStore(k.storeKey) | ||||
| 	bz := k.cdc.MustMarshal(¶ms) | ||||
| 	store.Set(types.ParamsKey, bz) | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) GetEpochNumber(ctx sdk.Context) (uint64, error) { | ||||
| 	store := ctx.KVStore(k.storeKey) | ||||
| 	bz := store.Get(types.EpochNumberKey) | ||||
| 	if bz == nil { | ||||
| 		return 0, types.ErrEpochNumberNotSet | ||||
| 	} | ||||
| 	return sdk.BigEndianToUint64(bz), nil | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) SetEpochNumber(ctx sdk.Context, epoch uint64) { | ||||
| 	store := ctx.KVStore(k.storeKey) | ||||
| 	store.Set(types.EpochNumberKey, sdk.Uint64ToBigEndian(epoch)) | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) GetSigner(ctx sdk.Context, account string) (types.Signer, bool, error) { | ||||
| 	store := prefix.NewStore(ctx.KVStore(k.storeKey), types.SignerKeyPrefix) | ||||
| 	key, err := types.GetSignerKeyFromAccount(account) | ||||
| 	if err != nil { | ||||
| 		return types.Signer{}, false, err | ||||
| 	} | ||||
| 	bz := store.Get(key) | ||||
| 	if bz == nil { | ||||
| 		return types.Signer{}, false, nil | ||||
| 	} | ||||
| 	var signer types.Signer | ||||
| 	k.cdc.MustUnmarshal(bz, &signer) | ||||
| 	return signer, true, nil | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) SetSigner(ctx sdk.Context, signer types.Signer) error { | ||||
| 	store := prefix.NewStore(ctx.KVStore(k.storeKey), types.SignerKeyPrefix) | ||||
| 	bz := k.cdc.MustMarshal(&signer) | ||||
| 	key, err := types.GetSignerKeyFromAccount(signer.Account) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	store.Set(key, bz) | ||||
| 
 | ||||
| 	ctx.EventManager().EmitEvent( | ||||
| 		sdk.NewEvent( | ||||
| 			types.EventTypeUpdateSigner, | ||||
| 			sdk.NewAttribute(types.AttributeKeySigner, signer.Account), | ||||
| 			sdk.NewAttribute(types.AttributeKeySocket, signer.Socket), | ||||
| 			sdk.NewAttribute(types.AttributeKeyPublicKeyG1, hex.EncodeToString(signer.PubkeyG1)), | ||||
| 			sdk.NewAttribute(types.AttributeKeyPublicKeyG2, hex.EncodeToString(signer.PubkeyG2)), | ||||
| 		), | ||||
| 	) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // iterate through the signers set and perform the provided function
 | ||||
| func (k Keeper) IterateSigners(ctx sdk.Context, fn func(index int64, signer types.Signer) (stop bool)) { | ||||
| 	store := ctx.KVStore(k.storeKey) | ||||
| 
 | ||||
| 	iterator := sdk.KVStorePrefixIterator(store, types.SignerKeyPrefix) | ||||
| 	defer iterator.Close() | ||||
| 
 | ||||
| 	i := int64(0) | ||||
| 
 | ||||
| 	for ; iterator.Valid(); iterator.Next() { | ||||
| 		var signer types.Signer | ||||
| 		k.cdc.MustUnmarshal(iterator.Value(), &signer) | ||||
| 		stop := fn(i, signer) | ||||
| 
 | ||||
| 		if stop { | ||||
| 			break | ||||
| 		} | ||||
| 		i++ | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) GetEpochSignerSet(ctx sdk.Context, epoch uint64) (types.EpochSignerSet, bool) { | ||||
| 	store := prefix.NewStore(ctx.KVStore(k.storeKey), types.SignerKeyPrefix) | ||||
| 	bz := store.Get(types.GetEpochSignerSetKeyFromEpoch(epoch)) | ||||
| 	if bz == nil { | ||||
| 		return types.EpochSignerSet{}, false | ||||
| 	} | ||||
| 	var signers types.EpochSignerSet | ||||
| 	k.cdc.MustUnmarshal(bz, &signers) | ||||
| 	return signers, true | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) SetEpochSignerSet(ctx sdk.Context, epoch uint64, signers types.EpochSignerSet) { | ||||
| 	store := prefix.NewStore(ctx.KVStore(k.storeKey), types.EpochSignerSetKeyPrefix) | ||||
| 	bz := k.cdc.MustMarshal(&signers) | ||||
| 	store.Set(types.GetEpochSignerSetKeyFromEpoch(epoch), bz) | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) GetRegistration(ctx sdk.Context, epoch uint64, account string) ([]byte, bool, error) { | ||||
| 	store := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetEpochRegistrationKeyPrefix(epoch)) | ||||
| 	key, err := types.GetRegistrationKey(account) | ||||
| 	if err != nil { | ||||
| 		return nil, false, err | ||||
| 	} | ||||
| 	signature := store.Get(key) | ||||
| 	if signature == nil { | ||||
| 		return nil, false, nil | ||||
| 	} | ||||
| 	return signature, true, nil | ||||
| } | ||||
| 
 | ||||
| // iterate through the registrations set and perform the provided function
 | ||||
| func (k Keeper) IterateRegistrations(ctx sdk.Context, epoch uint64, fn func(account string, signature []byte) (stop bool)) { | ||||
| 	store := ctx.KVStore(k.storeKey) | ||||
| 
 | ||||
| 	iterator := sdk.KVStorePrefixIterator(store, types.GetEpochRegistrationKeyPrefix(epoch)) | ||||
| 	defer iterator.Close() | ||||
| 
 | ||||
| 	i := int64(0) | ||||
| 
 | ||||
| 	for ; iterator.Valid(); iterator.Next() { | ||||
| 		stop := fn(hex.EncodeToString(iterator.Key()), iterator.Value()) | ||||
| 
 | ||||
| 		if stop { | ||||
| 			break | ||||
| 		} | ||||
| 		i++ | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) SetRegistration(ctx sdk.Context, epoch uint64, account string, signature []byte) error { | ||||
| 	store := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetEpochRegistrationKeyPrefix(epoch)) | ||||
| 	key, err := types.GetRegistrationKey(account) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	store.Set(key, signature) | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										92
									
								
								x/dasigners/v1/keeper/msg_server.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								x/dasigners/v1/keeper/msg_server.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | ||||
| package keeper | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/crypto/bn254util" | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" | ||||
| 	"github.com/ethereum/go-ethereum/common" | ||||
| 	etherminttypes "github.com/evmos/ethermint/types" | ||||
| ) | ||||
| 
 | ||||
| var _ types.MsgServer = &Keeper{} | ||||
| 
 | ||||
| func (k Keeper) RegisterSigner(goCtx context.Context, msg *types.MsgRegisterSigner) (*types.MsgRegisterSignerResponse, error) { | ||||
| 	ctx := sdk.UnwrapSDKContext(goCtx) | ||||
| 	// validate sender
 | ||||
| 	valAddr, err := sdk.ValAddressFromHex(msg.Signer.Account) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	_, found := k.stakingKeeper.GetValidator(ctx, valAddr) | ||||
| 	if !found { | ||||
| 		return nil, stakingtypes.ErrNoValidatorFound | ||||
| 	} | ||||
| 	_, found, err = k.GetSigner(ctx, msg.Signer.Account) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if found { | ||||
| 		return nil, types.ErrSignerExists | ||||
| 	} | ||||
| 	// validate signature
 | ||||
| 	chainID, err := etherminttypes.ParseChainID(ctx.ChainID()) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	hash := types.PubkeyRegistrationHash(common.HexToAddress(msg.Signer.Account), chainID) | ||||
| 	if !msg.Signer.ValidateSignature(hash, bn254util.DeserializeG1(msg.Signature)) { | ||||
| 		return nil, types.ErrInvalidSignature | ||||
| 	} | ||||
| 	// save signer
 | ||||
| 	if err := k.SetSigner(ctx, *msg.Signer); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &types.MsgRegisterSignerResponse{}, nil | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) UpdateSocket(goCtx context.Context, msg *types.MsgUpdateSocket) (*types.MsgUpdateSocketResponse, error) { | ||||
| 	ctx := sdk.UnwrapSDKContext(goCtx) | ||||
| 	signer, found, err := k.GetSigner(ctx, msg.Account) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if !found { | ||||
| 		return nil, types.ErrSignerNotFound | ||||
| 	} | ||||
| 	signer.Socket = msg.Socket | ||||
| 	if err := k.SetSigner(ctx, signer); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &types.MsgUpdateSocketResponse{}, nil | ||||
| } | ||||
| 
 | ||||
| func (k Keeper) RegisterNextEpoch(goCtx context.Context, msg *types.MsgRegisterNextEpoch) (*types.MsgRegisterNextEpochResponse, error) { | ||||
| 	ctx := sdk.UnwrapSDKContext(goCtx) | ||||
| 	// get signer
 | ||||
| 	signer, found, err := k.GetSigner(ctx, msg.Account) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if !found { | ||||
| 		return nil, types.ErrSignerNotFound | ||||
| 	} | ||||
| 	// validate signature
 | ||||
| 	epochNumber, err := k.GetEpochNumber(ctx) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	chainID, err := etherminttypes.ParseChainID(ctx.ChainID()) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	hash := types.EpochRegistrationHash(common.HexToAddress(msg.Account), epochNumber+1, chainID) | ||||
| 	if !signer.ValidateSignature(hash, bn254util.DeserializeG1(msg.Signature)) { | ||||
| 		return nil, types.ErrInvalidSignature | ||||
| 	} | ||||
| 	// save registration
 | ||||
| 	k.SetRegistration(ctx, epochNumber+1, msg.Account, msg.Signature) | ||||
| 	return &types.MsgRegisterNextEpochResponse{}, nil | ||||
| } | ||||
							
								
								
									
										181
									
								
								x/dasigners/v1/module.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								x/dasigners/v1/module.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,181 @@ | ||||
| package dasigners | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/cosmos/cosmos-sdk/client" | ||||
| 	"github.com/cosmos/cosmos-sdk/codec" | ||||
| 	codectypes "github.com/cosmos/cosmos-sdk/codec/types" | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/cosmos/cosmos-sdk/types/module" | ||||
| 	simtypes "github.com/cosmos/cosmos-sdk/types/simulation" | ||||
| 	stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" | ||||
| 	"github.com/gorilla/mux" | ||||
| 	"github.com/grpc-ecosystem/grpc-gateway/runtime" | ||||
| 	"github.com/spf13/cobra" | ||||
| 	abci "github.com/tendermint/tendermint/abci/types" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/client/cli" | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/keeper" | ||||
| 	"github.com/0glabs/0g-chain/x/dasigners/v1/types" | ||||
| ) | ||||
| 
 | ||||
| // consensusVersion defines the current x/council module consensus version.
 | ||||
| const consensusVersion = 1 | ||||
| 
 | ||||
| // type check to ensure the interface is properly implemented
 | ||||
| var ( | ||||
| 	_ module.AppModule      = AppModule{} | ||||
| 	_ module.AppModuleBasic = AppModuleBasic{} | ||||
| ) | ||||
| 
 | ||||
| // app module Basics object
 | ||||
| type AppModuleBasic struct{} | ||||
| 
 | ||||
| // Name returns the inflation module's name.
 | ||||
| func (AppModuleBasic) Name() string { | ||||
| 	return types.ModuleName | ||||
| } | ||||
| 
 | ||||
| // RegisterLegacyAminoCodec registers the inflation module's types on the given LegacyAmino codec.
 | ||||
| func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} | ||||
| 
 | ||||
| // ConsensusVersion returns the consensus state-breaking version for the module.
 | ||||
| func (AppModuleBasic) ConsensusVersion() uint64 { | ||||
| 	return consensusVersion | ||||
| } | ||||
| 
 | ||||
| // RegisterInterfaces registers interfaces and implementations of the incentives
 | ||||
| // module.
 | ||||
| func (AppModuleBasic) RegisterInterfaces(interfaceRegistry codectypes.InterfaceRegistry) { | ||||
| 	types.RegisterInterfaces(interfaceRegistry) | ||||
| } | ||||
| 
 | ||||
| // DefaultGenesis returns default genesis state as raw bytes for the incentives
 | ||||
| // module.
 | ||||
| func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { | ||||
| 	return cdc.MustMarshalJSON(types.DefaultGenesisState()) | ||||
| } | ||||
| 
 | ||||
| // ValidateGenesis performs genesis state validation for the inflation module.
 | ||||
| func (b AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { | ||||
| 	var genesisState types.GenesisState | ||||
| 	if err := cdc.UnmarshalJSON(bz, &genesisState); err != nil { | ||||
| 		return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) | ||||
| 	} | ||||
| 
 | ||||
| 	return genesisState.Validate() | ||||
| } | ||||
| 
 | ||||
| // RegisterRESTRoutes performs a no-op as the inflation module doesn't expose REST
 | ||||
| // endpoints
 | ||||
| func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} | ||||
| 
 | ||||
| // RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the inflation module.
 | ||||
| func (b AppModuleBasic) RegisterGRPCGatewayRoutes(c client.Context, serveMux *runtime.ServeMux) { | ||||
| 	if err := types.RegisterQueryHandlerClient(context.Background(), serveMux, types.NewQueryClient(c)); err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // GetTxCmd returns the root tx command for the inflation module.
 | ||||
| func (AppModuleBasic) GetTxCmd() *cobra.Command { | ||||
| 	return cli.GetTxCmd() | ||||
| } | ||||
| 
 | ||||
| // GetQueryCmd returns no root query command for the inflation module.
 | ||||
| func (AppModuleBasic) GetQueryCmd() *cobra.Command { | ||||
| 	return cli.GetQueryCmd() | ||||
| } | ||||
| 
 | ||||
| // ___________________________________________________________________________
 | ||||
| 
 | ||||
| // AppModule implements an application module for the inflation module.
 | ||||
| type AppModule struct { | ||||
| 	AppModuleBasic | ||||
| 	keeper keeper.Keeper | ||||
| 	sk     stakingkeeper.Keeper | ||||
| } | ||||
| 
 | ||||
| // NewAppModule creates a new AppModule Object
 | ||||
| func NewAppModule( | ||||
| 	k keeper.Keeper, | ||||
| 	sk stakingkeeper.Keeper, | ||||
| ) AppModule { | ||||
| 	return AppModule{ | ||||
| 		AppModuleBasic: AppModuleBasic{}, | ||||
| 		keeper:         k, | ||||
| 		sk:             sk, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // Name returns the inflation module's name.
 | ||||
| func (AppModule) Name() string { | ||||
| 	return types.ModuleName | ||||
| } | ||||
| 
 | ||||
| // Route returns dasigners module's message route.
 | ||||
| func (am AppModule) Route() sdk.Route { return sdk.Route{} } | ||||
| 
 | ||||
| // QuerierRoute returns dasigners module's query routing key.
 | ||||
| func (AppModule) QuerierRoute() string { return types.QuerierRoute } | ||||
| 
 | ||||
| // LegacyQuerierHandler returns dasigners module's Querier.
 | ||||
| func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sdk.Querier { | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // RegisterInvariants registers the inflation module invariants.
 | ||||
| func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} | ||||
| 
 | ||||
| // RegisterServices registers a gRPC query service to respond to the
 | ||||
| // module-specific gRPC queries.
 | ||||
| func (am AppModule) RegisterServices(cfg module.Configurator) { | ||||
| 	types.RegisterMsgServer(cfg.MsgServer(), am.keeper) | ||||
| 	types.RegisterQueryServer(cfg.QueryServer(), am.keeper) | ||||
| } | ||||
| 
 | ||||
| func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { | ||||
| 	am.keeper.BeginBlock(ctx, req) | ||||
| } | ||||
| 
 | ||||
| func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.ValidatorUpdate { | ||||
| 	// am.keeper.EndBlock(ctx, req)
 | ||||
| 	return []abci.ValidatorUpdate{} | ||||
| } | ||||
| 
 | ||||
| // InitGenesis performs genesis initialization for the inflation module. It returns
 | ||||
| // no validator updates.
 | ||||
| func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { | ||||
| 	var genesisState types.GenesisState | ||||
| 
 | ||||
| 	cdc.MustUnmarshalJSON(data, &genesisState) | ||||
| 	InitGenesis(ctx, am.keeper, genesisState) | ||||
| 	return []abci.ValidatorUpdate{} | ||||
| } | ||||
| 
 | ||||
| // ExportGenesis returns the exported genesis state as raw bytes for the inflation
 | ||||
| // module.
 | ||||
| func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { | ||||
| 	gs := ExportGenesis(ctx, am.keeper) | ||||
| 	return cdc.MustMarshalJSON(gs) | ||||
| } | ||||
| 
 | ||||
| // ___________________________________________________________________________
 | ||||
| 
 | ||||
| // AppModuleSimulation functions
 | ||||
| 
 | ||||
| // GenerateGenesisState creates a randomized GenState of the inflation module.
 | ||||
| func (am AppModule) GenerateGenesisState(_ *module.SimulationState) { | ||||
| } | ||||
| 
 | ||||
| // RegisterStoreDecoder registers a decoder for inflation module's types.
 | ||||
| func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) { | ||||
| } | ||||
| 
 | ||||
| // WeightedOperations doesn't return any inflation module operation.
 | ||||
| func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { | ||||
| 	return []simtypes.WeightedOperation{} | ||||
| } | ||||
							
								
								
									
										44
									
								
								x/dasigners/v1/types/codec.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								x/dasigners/v1/types/codec.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/cosmos/cosmos-sdk/codec" | ||||
| 	codectypes "github.com/cosmos/cosmos-sdk/codec/types" | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/cosmos/cosmos-sdk/types/msgservice" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	amino = codec.NewLegacyAmino() | ||||
| 	// ModuleCdc references the global evm module codec. Note, the codec should
 | ||||
| 	// ONLY be used in certain instances of tests and for JSON encoding.
 | ||||
| 	ModuleCdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry()) | ||||
| 
 | ||||
| 	// AminoCdc is a amino codec created to support amino JSON compatible msgs.
 | ||||
| 	AminoCdc = codec.NewAminoCodec(amino) | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| // Amino names
 | ||||
| ) | ||||
| 
 | ||||
| // NOTE: This is required for the GetSignBytes function
 | ||||
| func init() { | ||||
| 	RegisterLegacyAminoCodec(amino) | ||||
| 	amino.Seal() | ||||
| } | ||||
| 
 | ||||
| // RegisterInterfaces register implementations
 | ||||
| func RegisterInterfaces(registry codectypes.InterfaceRegistry) { | ||||
| 	registry.RegisterImplementations( | ||||
| 		(*sdk.Msg)(nil), | ||||
| 		&MsgRegisterSigner{}, | ||||
| 		&MsgUpdateSocket{}, | ||||
| 		&MsgRegisterNextEpoch{}, | ||||
| 	) | ||||
| 
 | ||||
| 	msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) | ||||
| } | ||||
| 
 | ||||
| // RegisterLegacyAminoCodec required for EIP-712
 | ||||
| func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { | ||||
| } | ||||
							
								
								
									
										626
									
								
								x/dasigners/v1/types/dasigners.pb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										626
									
								
								x/dasigners/v1/types/dasigners.pb.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,626 @@ | ||||
| // Code generated by protoc-gen-gogo. DO NOT EDIT.
 | ||||
| // source: zgc/dasigners/v1/dasigners.proto
 | ||||
| 
 | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	fmt "fmt" | ||||
| 	_ "github.com/cosmos/cosmos-proto" | ||||
| 	_ "github.com/cosmos/cosmos-sdk/codec/types" | ||||
| 	_ "github.com/gogo/protobuf/gogoproto" | ||||
| 	proto "github.com/gogo/protobuf/proto" | ||||
| 	_ "google.golang.org/protobuf/types/known/durationpb" | ||||
| 	io "io" | ||||
| 	math "math" | ||||
| 	math_bits "math/bits" | ||||
| ) | ||||
| 
 | ||||
| // Reference imports to suppress errors if they are not otherwise used.
 | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
| 
 | ||||
| // This is a compile-time assertion to ensure that this generated file
 | ||||
| // is compatible with the proto package it is being compiled against.
 | ||||
| // A compilation error at this line likely means your copy of the
 | ||||
| // proto package needs to be updated.
 | ||||
| const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
 | ||||
| 
 | ||||
| type Signer struct { | ||||
| 	// account defines the hex address of signer without 0x
 | ||||
| 	Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` | ||||
| 	// socket defines the da node socket address
 | ||||
| 	Socket string `protobuf:"bytes,2,opt,name=socket,proto3" json:"socket,omitempty"` | ||||
| 	// pubkey_g1 defines the public key on bn254 G1
 | ||||
| 	PubkeyG1 []byte `protobuf:"bytes,3,opt,name=pubkey_g1,json=pubkeyG1,proto3" json:"pubkey_g1,omitempty"` | ||||
| 	// pubkey_g1 defines the public key on bn254 G2
 | ||||
| 	PubkeyG2 []byte `protobuf:"bytes,4,opt,name=pubkey_g2,json=pubkeyG2,proto3" json:"pubkey_g2,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (m *Signer) Reset()         { *m = Signer{} } | ||||
| func (m *Signer) String() string { return proto.CompactTextString(m) } | ||||
| func (*Signer) ProtoMessage()    {} | ||||
| func (*Signer) Descriptor() ([]byte, []int) { | ||||
| 	return fileDescriptor_b7328dc8ffac059e, []int{0} | ||||
| } | ||||
| func (m *Signer) XXX_Unmarshal(b []byte) error { | ||||
| 	return m.Unmarshal(b) | ||||
| } | ||||
| func (m *Signer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | ||||
| 	if deterministic { | ||||
| 		return xxx_messageInfo_Signer.Marshal(b, m, deterministic) | ||||
| 	} else { | ||||
| 		b = b[:cap(b)] | ||||
| 		n, err := m.MarshalToSizedBuffer(b) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return b[:n], nil | ||||
| 	} | ||||
| } | ||||
| func (m *Signer) XXX_Merge(src proto.Message) { | ||||
| 	xxx_messageInfo_Signer.Merge(m, src) | ||||
| } | ||||
| func (m *Signer) XXX_Size() int { | ||||
| 	return m.Size() | ||||
| } | ||||
| func (m *Signer) XXX_DiscardUnknown() { | ||||
| 	xxx_messageInfo_Signer.DiscardUnknown(m) | ||||
| } | ||||
| 
 | ||||
| var xxx_messageInfo_Signer proto.InternalMessageInfo | ||||
| 
 | ||||
| type EpochSignerSet struct { | ||||
| 	Signers []string `protobuf:"bytes,1,rep,name=signers,proto3" json:"signers,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (m *EpochSignerSet) Reset()         { *m = EpochSignerSet{} } | ||||
| func (m *EpochSignerSet) String() string { return proto.CompactTextString(m) } | ||||
| func (*EpochSignerSet) ProtoMessage()    {} | ||||
| func (*EpochSignerSet) Descriptor() ([]byte, []int) { | ||||
| 	return fileDescriptor_b7328dc8ffac059e, []int{1} | ||||
| } | ||||
| func (m *EpochSignerSet) XXX_Unmarshal(b []byte) error { | ||||
| 	return m.Unmarshal(b) | ||||
| } | ||||
| func (m *EpochSignerSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | ||||
| 	if deterministic { | ||||
| 		return xxx_messageInfo_EpochSignerSet.Marshal(b, m, deterministic) | ||||
| 	} else { | ||||
| 		b = b[:cap(b)] | ||||
| 		n, err := m.MarshalToSizedBuffer(b) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return b[:n], nil | ||||
| 	} | ||||
| } | ||||
| func (m *EpochSignerSet) XXX_Merge(src proto.Message) { | ||||
| 	xxx_messageInfo_EpochSignerSet.Merge(m, src) | ||||
| } | ||||
| func (m *EpochSignerSet) XXX_Size() int { | ||||
| 	return m.Size() | ||||
| } | ||||
| func (m *EpochSignerSet) XXX_DiscardUnknown() { | ||||
| 	xxx_messageInfo_EpochSignerSet.DiscardUnknown(m) | ||||
| } | ||||
| 
 | ||||
| var xxx_messageInfo_EpochSignerSet proto.InternalMessageInfo | ||||
| 
 | ||||
| func init() { | ||||
| 	proto.RegisterType((*Signer)(nil), "zgc.dasigners.v1.Signer") | ||||
| 	proto.RegisterType((*EpochSignerSet)(nil), "zgc.dasigners.v1.EpochSignerSet") | ||||
| } | ||||
| 
 | ||||
| func init() { proto.RegisterFile("zgc/dasigners/v1/dasigners.proto", fileDescriptor_b7328dc8ffac059e) } | ||||
| 
 | ||||
| var fileDescriptor_b7328dc8ffac059e = []byte{ | ||||
| 	// 287 bytes of a gzipped FileDescriptorProto
 | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x90, 0xc1, 0x4a, 0xc3, 0x30, | ||||
| 	0x1c, 0xc6, 0x1b, 0x27, 0xd3, 0x05, 0x11, 0x29, 0x22, 0xd9, 0x84, 0x50, 0x76, 0x1a, 0x82, 0xcd, | ||||
| 	0x3a, 0xdf, 0x40, 0x10, 0x4f, 0x5e, 0xb6, 0x9b, 0x97, 0x91, 0x66, 0x31, 0x2d, 0xdb, 0xfa, 0x2f, | ||||
| 	0x4d, 0x3a, 0xec, 0x9e, 0xc2, 0xc7, 0xda, 0x71, 0x47, 0x8f, 0xda, 0xbe, 0x88, 0xb4, 0xa9, 0xcc, | ||||
| 	0x79, 0xcb, 0xef, 0xfb, 0x05, 0x3e, 0xfe, 0x1f, 0xf6, 0xb6, 0x4a, 0xb0, 0x05, 0xd7, 0xb1, 0x4a, | ||||
| 	0x64, 0xa6, 0xd9, 0x26, 0x38, 0x80, 0x9f, 0x66, 0x60, 0xc0, 0xbd, 0xda, 0x2a, 0xe1, 0x1f, 0xc2, | ||||
| 	0x4d, 0x30, 0xe8, 0x0b, 0xd0, 0x6b, 0xd0, 0xf3, 0xc6, 0x33, 0x0b, 0xf6, 0xf3, 0xe0, 0x5a, 0x81, | ||||
| 	0x02, 0x9b, 0xd7, 0xaf, 0x36, 0xed, 0x2b, 0x00, 0xb5, 0x92, 0xac, 0xa1, 0x30, 0x7f, 0x63, 0x3c, | ||||
| 	0x29, 0x5a, 0x45, 0xff, 0xab, 0x45, 0x9e, 0x71, 0x13, 0x43, 0x62, 0xfd, 0xd0, 0xe0, 0xee, 0xac, | ||||
| 	0x69, 0x76, 0x09, 0x3e, 0xe3, 0x42, 0x40, 0x9e, 0x18, 0x82, 0x3c, 0x34, 0xea, 0x4d, 0x7f, 0xd1, | ||||
| 	0xbd, 0xc1, 0x5d, 0x0d, 0x62, 0x29, 0x0d, 0x39, 0x69, 0x44, 0x4b, 0xee, 0x2d, 0xee, 0xa5, 0x79, | ||||
| 	0xb8, 0x94, 0xc5, 0x5c, 0x05, 0xa4, 0xe3, 0xa1, 0xd1, 0xc5, 0xf4, 0xdc, 0x06, 0xcf, 0xc1, 0x5f, | ||||
| 	0x39, 0x21, 0xa7, 0x47, 0x72, 0x32, 0xbc, 0xc3, 0x97, 0x4f, 0x29, 0x88, 0xc8, 0x56, 0xcf, 0xa4, | ||||
| 	0xa9, 0xdb, 0xdb, 0x05, 0x08, 0xf2, 0x3a, 0x75, 0x7b, 0x8b, 0x8f, 0x2f, 0xbb, 0x6f, 0xea, 0xec, | ||||
| 	0x4a, 0x8a, 0xf6, 0x25, 0x45, 0x5f, 0x25, 0x45, 0x1f, 0x15, 0x75, 0xf6, 0x15, 0x75, 0x3e, 0x2b, | ||||
| 	0xea, 0xbc, 0x32, 0x15, 0x9b, 0x28, 0x0f, 0x7d, 0x01, 0x6b, 0x36, 0x56, 0x2b, 0x1e, 0x6a, 0x36, | ||||
| 	0x56, 0xf7, 0x22, 0xe2, 0x71, 0xc2, 0xde, 0x8f, 0x87, 0x37, 0x45, 0x2a, 0x75, 0xd8, 0x6d, 0xee, | ||||
| 	0x7e, 0xf8, 0x09, 0x00, 0x00, 0xff, 0xff, 0x77, 0x51, 0x09, 0xd9, 0x99, 0x01, 0x00, 0x00, | ||||
| } | ||||
| 
 | ||||
| func (m *Signer) Marshal() (dAtA []byte, err error) { | ||||
| 	size := m.Size() | ||||
| 	dAtA = make([]byte, size) | ||||
| 	n, err := m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return dAtA[:n], nil | ||||
| } | ||||
| 
 | ||||
| func (m *Signer) MarshalTo(dAtA []byte) (int, error) { | ||||
| 	size := m.Size() | ||||
| 	return m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| } | ||||
| 
 | ||||
| func (m *Signer) MarshalToSizedBuffer(dAtA []byte) (int, error) { | ||||
| 	i := len(dAtA) | ||||
| 	_ = i | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	if len(m.PubkeyG2) > 0 { | ||||
| 		i -= len(m.PubkeyG2) | ||||
| 		copy(dAtA[i:], m.PubkeyG2) | ||||
| 		i = encodeVarintDasigners(dAtA, i, uint64(len(m.PubkeyG2))) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x22 | ||||
| 	} | ||||
| 	if len(m.PubkeyG1) > 0 { | ||||
| 		i -= len(m.PubkeyG1) | ||||
| 		copy(dAtA[i:], m.PubkeyG1) | ||||
| 		i = encodeVarintDasigners(dAtA, i, uint64(len(m.PubkeyG1))) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x1a | ||||
| 	} | ||||
| 	if len(m.Socket) > 0 { | ||||
| 		i -= len(m.Socket) | ||||
| 		copy(dAtA[i:], m.Socket) | ||||
| 		i = encodeVarintDasigners(dAtA, i, uint64(len(m.Socket))) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x12 | ||||
| 	} | ||||
| 	if len(m.Account) > 0 { | ||||
| 		i -= len(m.Account) | ||||
| 		copy(dAtA[i:], m.Account) | ||||
| 		i = encodeVarintDasigners(dAtA, i, uint64(len(m.Account))) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0xa | ||||
| 	} | ||||
| 	return len(dAtA) - i, nil | ||||
| } | ||||
| 
 | ||||
| func (m *EpochSignerSet) Marshal() (dAtA []byte, err error) { | ||||
| 	size := m.Size() | ||||
| 	dAtA = make([]byte, size) | ||||
| 	n, err := m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return dAtA[:n], nil | ||||
| } | ||||
| 
 | ||||
| func (m *EpochSignerSet) MarshalTo(dAtA []byte) (int, error) { | ||||
| 	size := m.Size() | ||||
| 	return m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| } | ||||
| 
 | ||||
| func (m *EpochSignerSet) MarshalToSizedBuffer(dAtA []byte) (int, error) { | ||||
| 	i := len(dAtA) | ||||
| 	_ = i | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	if len(m.Signers) > 0 { | ||||
| 		for iNdEx := len(m.Signers) - 1; iNdEx >= 0; iNdEx-- { | ||||
| 			i -= len(m.Signers[iNdEx]) | ||||
| 			copy(dAtA[i:], m.Signers[iNdEx]) | ||||
| 			i = encodeVarintDasigners(dAtA, i, uint64(len(m.Signers[iNdEx]))) | ||||
| 			i-- | ||||
| 			dAtA[i] = 0xa | ||||
| 		} | ||||
| 	} | ||||
| 	return len(dAtA) - i, nil | ||||
| } | ||||
| 
 | ||||
| func encodeVarintDasigners(dAtA []byte, offset int, v uint64) int { | ||||
| 	offset -= sovDasigners(v) | ||||
| 	base := offset | ||||
| 	for v >= 1<<7 { | ||||
| 		dAtA[offset] = uint8(v&0x7f | 0x80) | ||||
| 		v >>= 7 | ||||
| 		offset++ | ||||
| 	} | ||||
| 	dAtA[offset] = uint8(v) | ||||
| 	return base | ||||
| } | ||||
| func (m *Signer) Size() (n int) { | ||||
| 	if m == nil { | ||||
| 		return 0 | ||||
| 	} | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	l = len(m.Account) | ||||
| 	if l > 0 { | ||||
| 		n += 1 + l + sovDasigners(uint64(l)) | ||||
| 	} | ||||
| 	l = len(m.Socket) | ||||
| 	if l > 0 { | ||||
| 		n += 1 + l + sovDasigners(uint64(l)) | ||||
| 	} | ||||
| 	l = len(m.PubkeyG1) | ||||
| 	if l > 0 { | ||||
| 		n += 1 + l + sovDasigners(uint64(l)) | ||||
| 	} | ||||
| 	l = len(m.PubkeyG2) | ||||
| 	if l > 0 { | ||||
| 		n += 1 + l + sovDasigners(uint64(l)) | ||||
| 	} | ||||
| 	return n | ||||
| } | ||||
| 
 | ||||
| func (m *EpochSignerSet) Size() (n int) { | ||||
| 	if m == nil { | ||||
| 		return 0 | ||||
| 	} | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	if len(m.Signers) > 0 { | ||||
| 		for _, s := range m.Signers { | ||||
| 			l = len(s) | ||||
| 			n += 1 + l + sovDasigners(uint64(l)) | ||||
| 		} | ||||
| 	} | ||||
| 	return n | ||||
| } | ||||
| 
 | ||||
| func sovDasigners(x uint64) (n int) { | ||||
| 	return (math_bits.Len64(x|1) + 6) / 7 | ||||
| } | ||||
| func sozDasigners(x uint64) (n int) { | ||||
| 	return sovDasigners(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||
| } | ||||
| func (m *Signer) Unmarshal(dAtA []byte) error { | ||||
| 	l := len(dAtA) | ||||
| 	iNdEx := 0 | ||||
| 	for iNdEx < l { | ||||
| 		preIndex := iNdEx | ||||
| 		var wire uint64 | ||||
| 		for shift := uint(0); ; shift += 7 { | ||||
| 			if shift >= 64 { | ||||
| 				return ErrIntOverflowDasigners | ||||
| 			} | ||||
| 			if iNdEx >= l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			b := dAtA[iNdEx] | ||||
| 			iNdEx++ | ||||
| 			wire |= uint64(b&0x7F) << shift | ||||
| 			if b < 0x80 { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		fieldNum := int32(wire >> 3) | ||||
| 		wireType := int(wire & 0x7) | ||||
| 		if wireType == 4 { | ||||
| 			return fmt.Errorf("proto: Signer: wiretype end group for non-group") | ||||
| 		} | ||||
| 		if fieldNum <= 0 { | ||||
| 			return fmt.Errorf("proto: Signer: illegal tag %d (wire type %d)", fieldNum, wire) | ||||
| 		} | ||||
| 		switch fieldNum { | ||||
| 		case 1: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field Account", wireType) | ||||
| 			} | ||||
| 			var stringLen uint64 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowDasigners | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				stringLen |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			intStringLen := int(stringLen) | ||||
| 			if intStringLen < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			postIndex := iNdEx + intStringLen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.Account = string(dAtA[iNdEx:postIndex]) | ||||
| 			iNdEx = postIndex | ||||
| 		case 2: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field Socket", wireType) | ||||
| 			} | ||||
| 			var stringLen uint64 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowDasigners | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				stringLen |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			intStringLen := int(stringLen) | ||||
| 			if intStringLen < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			postIndex := iNdEx + intStringLen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.Socket = string(dAtA[iNdEx:postIndex]) | ||||
| 			iNdEx = postIndex | ||||
| 		case 3: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field PubkeyG1", wireType) | ||||
| 			} | ||||
| 			var byteLen int | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowDasigners | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				byteLen |= int(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if byteLen < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			postIndex := iNdEx + byteLen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.PubkeyG1 = append(m.PubkeyG1[:0], dAtA[iNdEx:postIndex]...) | ||||
| 			if m.PubkeyG1 == nil { | ||||
| 				m.PubkeyG1 = []byte{} | ||||
| 			} | ||||
| 			iNdEx = postIndex | ||||
| 		case 4: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field PubkeyG2", wireType) | ||||
| 			} | ||||
| 			var byteLen int | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowDasigners | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				byteLen |= int(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if byteLen < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			postIndex := iNdEx + byteLen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.PubkeyG2 = append(m.PubkeyG2[:0], dAtA[iNdEx:postIndex]...) | ||||
| 			if m.PubkeyG2 == nil { | ||||
| 				m.PubkeyG2 = []byte{} | ||||
| 			} | ||||
| 			iNdEx = postIndex | ||||
| 		default: | ||||
| 			iNdEx = preIndex | ||||
| 			skippy, err := skipDasigners(dAtA[iNdEx:]) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if (skippy < 0) || (iNdEx+skippy) < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			if (iNdEx + skippy) > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			iNdEx += skippy | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if iNdEx > l { | ||||
| 		return io.ErrUnexpectedEOF | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| func (m *EpochSignerSet) Unmarshal(dAtA []byte) error { | ||||
| 	l := len(dAtA) | ||||
| 	iNdEx := 0 | ||||
| 	for iNdEx < l { | ||||
| 		preIndex := iNdEx | ||||
| 		var wire uint64 | ||||
| 		for shift := uint(0); ; shift += 7 { | ||||
| 			if shift >= 64 { | ||||
| 				return ErrIntOverflowDasigners | ||||
| 			} | ||||
| 			if iNdEx >= l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			b := dAtA[iNdEx] | ||||
| 			iNdEx++ | ||||
| 			wire |= uint64(b&0x7F) << shift | ||||
| 			if b < 0x80 { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		fieldNum := int32(wire >> 3) | ||||
| 		wireType := int(wire & 0x7) | ||||
| 		if wireType == 4 { | ||||
| 			return fmt.Errorf("proto: EpochSignerSet: wiretype end group for non-group") | ||||
| 		} | ||||
| 		if fieldNum <= 0 { | ||||
| 			return fmt.Errorf("proto: EpochSignerSet: illegal tag %d (wire type %d)", fieldNum, wire) | ||||
| 		} | ||||
| 		switch fieldNum { | ||||
| 		case 1: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field Signers", wireType) | ||||
| 			} | ||||
| 			var stringLen uint64 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowDasigners | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				stringLen |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			intStringLen := int(stringLen) | ||||
| 			if intStringLen < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			postIndex := iNdEx + intStringLen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.Signers = append(m.Signers, string(dAtA[iNdEx:postIndex])) | ||||
| 			iNdEx = postIndex | ||||
| 		default: | ||||
| 			iNdEx = preIndex | ||||
| 			skippy, err := skipDasigners(dAtA[iNdEx:]) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if (skippy < 0) || (iNdEx+skippy) < 0 { | ||||
| 				return ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			if (iNdEx + skippy) > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			iNdEx += skippy | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if iNdEx > l { | ||||
| 		return io.ErrUnexpectedEOF | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| func skipDasigners(dAtA []byte) (n int, err error) { | ||||
| 	l := len(dAtA) | ||||
| 	iNdEx := 0 | ||||
| 	depth := 0 | ||||
| 	for iNdEx < l { | ||||
| 		var wire uint64 | ||||
| 		for shift := uint(0); ; shift += 7 { | ||||
| 			if shift >= 64 { | ||||
| 				return 0, ErrIntOverflowDasigners | ||||
| 			} | ||||
| 			if iNdEx >= l { | ||||
| 				return 0, io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			b := dAtA[iNdEx] | ||||
| 			iNdEx++ | ||||
| 			wire |= (uint64(b) & 0x7F) << shift | ||||
| 			if b < 0x80 { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		wireType := int(wire & 0x7) | ||||
| 		switch wireType { | ||||
| 		case 0: | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return 0, ErrIntOverflowDasigners | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return 0, io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				iNdEx++ | ||||
| 				if dAtA[iNdEx-1] < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		case 1: | ||||
| 			iNdEx += 8 | ||||
| 		case 2: | ||||
| 			var length int | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return 0, ErrIntOverflowDasigners | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return 0, io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				length |= (int(b) & 0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if length < 0 { | ||||
| 				return 0, ErrInvalidLengthDasigners | ||||
| 			} | ||||
| 			iNdEx += length | ||||
| 		case 3: | ||||
| 			depth++ | ||||
| 		case 4: | ||||
| 			if depth == 0 { | ||||
| 				return 0, ErrUnexpectedEndOfGroupDasigners | ||||
| 			} | ||||
| 			depth-- | ||||
| 		case 5: | ||||
| 			iNdEx += 4 | ||||
| 		default: | ||||
| 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||
| 		} | ||||
| 		if iNdEx < 0 { | ||||
| 			return 0, ErrInvalidLengthDasigners | ||||
| 		} | ||||
| 		if depth == 0 { | ||||
| 			return iNdEx, nil | ||||
| 		} | ||||
| 	} | ||||
| 	return 0, io.ErrUnexpectedEOF | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	ErrInvalidLengthDasigners        = fmt.Errorf("proto: negative length found during unmarshaling") | ||||
| 	ErrIntOverflowDasigners          = fmt.Errorf("proto: integer overflow") | ||||
| 	ErrUnexpectedEndOfGroupDasigners = fmt.Errorf("proto: unexpected end of group") | ||||
| ) | ||||
							
								
								
									
										12
									
								
								x/dasigners/v1/types/errors.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								x/dasigners/v1/types/errors.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| package types | ||||
| 
 | ||||
| import errorsmod "cosmossdk.io/errors" | ||||
| 
 | ||||
| var ( | ||||
| 	ErrSignerExists           = errorsmod.Register(ModuleName, 1, "signer exists") | ||||
| 	ErrEpochNumberNotSet      = errorsmod.Register(ModuleName, 2, "epoch number not set") | ||||
| 	ErrSignerNotFound         = errorsmod.Register(ModuleName, 3, "signer not found") | ||||
| 	ErrInvalidSignature       = errorsmod.Register(ModuleName, 4, "invalid signature") | ||||
| 	ErrEpochSignerSetNotFound = errorsmod.Register(ModuleName, 5, "signer set for epoch not found") | ||||
| 	ErrSignerLengthNotMatch   = errorsmod.Register(ModuleName, 6, "signer set length not match") | ||||
| ) | ||||
							
								
								
									
										11
									
								
								x/dasigners/v1/types/events.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								x/dasigners/v1/types/events.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| package types | ||||
| 
 | ||||
| // Module event types
 | ||||
| const ( | ||||
| 	EventTypeUpdateSigner = "update_signer" | ||||
| 
 | ||||
| 	AttributeKeySigner      = "signer" | ||||
| 	AttributeKeySocket      = "socket" | ||||
| 	AttributeKeyPublicKeyG1 = "pubkey_g1" | ||||
| 	AttributeKeyPublicKeyG2 = "pubkey_g2" | ||||
| ) | ||||
							
								
								
									
										48
									
								
								x/dasigners/v1/types/genesis.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								x/dasigners/v1/types/genesis.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| package types | ||||
| 
 | ||||
| import "fmt" | ||||
| 
 | ||||
| // NewGenesisState returns a new genesis state object for the module.
 | ||||
| func NewGenesisState(params Params, epoch uint64, signers []*Signer, signersByEpoch []*EpochSignerSet) *GenesisState { | ||||
| 	return &GenesisState{ | ||||
| 		Params:         params, | ||||
| 		EpochNumber:    epoch, | ||||
| 		Signers:        signers, | ||||
| 		SignersByEpoch: signersByEpoch, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // DefaultGenesisState returns the default genesis state for the module.
 | ||||
| func DefaultGenesisState() *GenesisState { | ||||
| 	return NewGenesisState(Params{ | ||||
| 		QuorumSize:    1024, | ||||
| 		TokensPerVote: "1000", | ||||
| 		MaxVotes:      100, | ||||
| 		EpochBlocks:   5, | ||||
| 	}, 0, make([]*Signer, 0), make([]*EpochSignerSet, 0)) | ||||
| } | ||||
| 
 | ||||
| // Validate performs basic validation of genesis data.
 | ||||
| func (gs GenesisState) Validate() error { | ||||
| 	registered := make(map[string]struct{}) | ||||
| 	for _, signer := range gs.Signers { | ||||
| 		if err := signer.Validate(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		registered[signer.Account] = struct{}{} | ||||
| 	} | ||||
| 	if len(gs.SignersByEpoch) != int(gs.EpochNumber) { | ||||
| 		return fmt.Errorf("epoch history missing") | ||||
| 	} | ||||
| 	for _, signers := range gs.SignersByEpoch { | ||||
| 		for _, signer := range signers.Signers { | ||||
| 			if err := ValidateHexAddress(signer); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if _, ok := registered[signer]; !ok { | ||||
| 				return fmt.Errorf("historical signer detail missing") | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										775
									
								
								x/dasigners/v1/types/genesis.pb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										775
									
								
								x/dasigners/v1/types/genesis.pb.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,775 @@ | ||||
| // Code generated by protoc-gen-gogo. DO NOT EDIT.
 | ||||
| // source: zgc/dasigners/v1/genesis.proto
 | ||||
| 
 | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	fmt "fmt" | ||||
| 	_ "github.com/cosmos/cosmos-proto" | ||||
| 	_ "github.com/cosmos/cosmos-sdk/codec/types" | ||||
| 	_ "github.com/gogo/protobuf/gogoproto" | ||||
| 	proto "github.com/gogo/protobuf/proto" | ||||
| 	_ "google.golang.org/protobuf/types/known/timestamppb" | ||||
| 	io "io" | ||||
| 	math "math" | ||||
| 	math_bits "math/bits" | ||||
| ) | ||||
| 
 | ||||
| // Reference imports to suppress errors if they are not otherwise used.
 | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
| 
 | ||||
| // This is a compile-time assertion to ensure that this generated file
 | ||||
| // is compatible with the proto package it is being compiled against.
 | ||||
| // A compilation error at this line likely means your copy of the
 | ||||
| // proto package needs to be updated.
 | ||||
| const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
 | ||||
| 
 | ||||
| type Params struct { | ||||
| 	QuorumSize    uint64 `protobuf:"varint,1,opt,name=quorum_size,json=quorumSize,proto3" json:"quorum_size,omitempty"` | ||||
| 	TokensPerVote string `protobuf:"bytes,2,opt,name=tokens_per_vote,json=tokensPerVote,proto3" json:"tokens_per_vote,omitempty"` | ||||
| 	MaxVotes      uint64 `protobuf:"varint,3,opt,name=max_votes,json=maxVotes,proto3" json:"max_votes,omitempty"` | ||||
| 	EpochBlocks   uint64 `protobuf:"varint,4,opt,name=epoch_blocks,json=epochBlocks,proto3" json:"epoch_blocks,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (m *Params) Reset()         { *m = Params{} } | ||||
| func (m *Params) String() string { return proto.CompactTextString(m) } | ||||
| func (*Params) ProtoMessage()    {} | ||||
| func (*Params) Descriptor() ([]byte, []int) { | ||||
| 	return fileDescriptor_896efa766aaca3be, []int{0} | ||||
| } | ||||
| func (m *Params) XXX_Unmarshal(b []byte) error { | ||||
| 	return m.Unmarshal(b) | ||||
| } | ||||
| func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | ||||
| 	if deterministic { | ||||
| 		return xxx_messageInfo_Params.Marshal(b, m, deterministic) | ||||
| 	} else { | ||||
| 		b = b[:cap(b)] | ||||
| 		n, err := m.MarshalToSizedBuffer(b) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return b[:n], nil | ||||
| 	} | ||||
| } | ||||
| func (m *Params) XXX_Merge(src proto.Message) { | ||||
| 	xxx_messageInfo_Params.Merge(m, src) | ||||
| } | ||||
| func (m *Params) XXX_Size() int { | ||||
| 	return m.Size() | ||||
| } | ||||
| func (m *Params) XXX_DiscardUnknown() { | ||||
| 	xxx_messageInfo_Params.DiscardUnknown(m) | ||||
| } | ||||
| 
 | ||||
| var xxx_messageInfo_Params proto.InternalMessageInfo | ||||
| 
 | ||||
| func (m *Params) GetQuorumSize() uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.QuorumSize | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func (m *Params) GetTokensPerVote() string { | ||||
| 	if m != nil { | ||||
| 		return m.TokensPerVote | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| func (m *Params) GetMaxVotes() uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.MaxVotes | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func (m *Params) GetEpochBlocks() uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.EpochBlocks | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // GenesisState defines the dasigners module's genesis state.
 | ||||
| type GenesisState struct { | ||||
| 	// params defines all the parameters of related to deposit.
 | ||||
| 	Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` | ||||
| 	// params epoch_number the epoch number
 | ||||
| 	EpochNumber uint64 `protobuf:"varint,2,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` | ||||
| 	// signers defines all signers information
 | ||||
| 	Signers []*Signer `protobuf:"bytes,3,rep,name=signers,proto3" json:"signers,omitempty"` | ||||
| 	// signers_by_epoch defines chosen signers by epoch
 | ||||
| 	SignersByEpoch []*EpochSignerSet `protobuf:"bytes,4,rep,name=signers_by_epoch,json=signersByEpoch,proto3" json:"signers_by_epoch,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) Reset()         { *m = GenesisState{} } | ||||
| func (m *GenesisState) String() string { return proto.CompactTextString(m) } | ||||
| func (*GenesisState) ProtoMessage()    {} | ||||
| func (*GenesisState) Descriptor() ([]byte, []int) { | ||||
| 	return fileDescriptor_896efa766aaca3be, []int{1} | ||||
| } | ||||
| func (m *GenesisState) XXX_Unmarshal(b []byte) error { | ||||
| 	return m.Unmarshal(b) | ||||
| } | ||||
| func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { | ||||
| 	if deterministic { | ||||
| 		return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) | ||||
| 	} else { | ||||
| 		b = b[:cap(b)] | ||||
| 		n, err := m.MarshalToSizedBuffer(b) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return b[:n], nil | ||||
| 	} | ||||
| } | ||||
| func (m *GenesisState) XXX_Merge(src proto.Message) { | ||||
| 	xxx_messageInfo_GenesisState.Merge(m, src) | ||||
| } | ||||
| func (m *GenesisState) XXX_Size() int { | ||||
| 	return m.Size() | ||||
| } | ||||
| func (m *GenesisState) XXX_DiscardUnknown() { | ||||
| 	xxx_messageInfo_GenesisState.DiscardUnknown(m) | ||||
| } | ||||
| 
 | ||||
| var xxx_messageInfo_GenesisState proto.InternalMessageInfo | ||||
| 
 | ||||
| func (m *GenesisState) GetParams() Params { | ||||
| 	if m != nil { | ||||
| 		return m.Params | ||||
| 	} | ||||
| 	return Params{} | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) GetEpochNumber() uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.EpochNumber | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) GetSigners() []*Signer { | ||||
| 	if m != nil { | ||||
| 		return m.Signers | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) GetSignersByEpoch() []*EpochSignerSet { | ||||
| 	if m != nil { | ||||
| 		return m.SignersByEpoch | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func init() { | ||||
| 	proto.RegisterType((*Params)(nil), "zgc.dasigners.v1.Params") | ||||
| 	proto.RegisterType((*GenesisState)(nil), "zgc.dasigners.v1.GenesisState") | ||||
| } | ||||
| 
 | ||||
| func init() { proto.RegisterFile("zgc/dasigners/v1/genesis.proto", fileDescriptor_896efa766aaca3be) } | ||||
| 
 | ||||
| var fileDescriptor_896efa766aaca3be = []byte{ | ||||
| 	// 415 bytes of a gzipped FileDescriptorProto
 | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0xc1, 0x6e, 0xd3, 0x30, | ||||
| 	0x1c, 0xc6, 0x6b, 0x1a, 0x15, 0xe6, 0x0e, 0x98, 0x2c, 0x0e, 0xd9, 0x90, 0xd2, 0xb0, 0x03, 0xda, | ||||
| 	0x85, 0x78, 0x1b, 0x12, 0x0f, 0x10, 0x09, 0x21, 0x38, 0xa0, 0x29, 0x91, 0x38, 0x70, 0x89, 0x9c, | ||||
| 	0xf0, 0xc7, 0x8d, 0x56, 0xc7, 0x21, 0x76, 0xaa, 0x26, 0x4f, 0x01, 0x6f, 0xb5, 0xe3, 0x8e, 0x9c, | ||||
| 	0x10, 0x6a, 0x4f, 0xbc, 0x05, 0xea, 0xdf, 0x19, 0x13, 0xeb, 0x6e, 0x7f, 0x7f, 0xbf, 0xcf, 0x9f, | ||||
| 	0x3f, 0xdb, 0x34, 0xe8, 0x65, 0xc1, 0xbf, 0x08, 0x53, 0xca, 0x0a, 0x1a, 0xc3, 0x97, 0x67, 0x5c, | ||||
| 	0x42, 0x05, 0xa6, 0x34, 0x51, 0xdd, 0x68, 0xab, 0xd9, 0x41, 0x2f, 0x8b, 0xe8, 0x1f, 0x8f, 0x96, | ||||
| 	0x67, 0x47, 0x87, 0x85, 0x36, 0x4a, 0x9b, 0x0c, 0x39, 0x77, 0x0b, 0x67, 0x3e, 0x7a, 0x26, 0xb5, | ||||
| 	0xd4, 0x4e, 0xdf, 0x4e, 0x83, 0x7a, 0x28, 0xb5, 0x96, 0x0b, 0xe0, 0xb8, 0xca, 0xdb, 0xaf, 0x5c, | ||||
| 	0x54, 0xdd, 0x80, 0x66, 0x77, 0x91, 0x2d, 0x15, 0x18, 0x2b, 0x54, 0x3d, 0x18, 0xc2, 0x9d, 0x7a, | ||||
| 	0xb7, 0x5d, 0xd0, 0x71, 0xfc, 0x83, 0xd0, 0xc9, 0x85, 0x68, 0x84, 0x32, 0x6c, 0x46, 0xa7, 0xdf, | ||||
| 	0x5a, 0xdd, 0xb4, 0x2a, 0x33, 0x65, 0x0f, 0x3e, 0x09, 0xc9, 0x89, 0x97, 0x50, 0x27, 0xa5, 0x65, | ||||
| 	0x0f, 0xec, 0x25, 0x7d, 0x6a, 0xf5, 0x25, 0x54, 0x26, 0xab, 0xa1, 0xc9, 0x96, 0xda, 0x82, 0xff, | ||||
| 	0x20, 0x24, 0x27, 0x7b, 0xc9, 0x63, 0x27, 0x5f, 0x40, 0xf3, 0x49, 0x5b, 0x60, 0xcf, 0xe9, 0x9e, | ||||
| 	0x12, 0x2b, 0x34, 0x18, 0x7f, 0x8c, 0x31, 0x8f, 0x94, 0x58, 0x6d, 0x99, 0x61, 0x2f, 0xe8, 0x3e, | ||||
| 	0xd4, 0xba, 0x98, 0x67, 0xf9, 0x42, 0x17, 0x97, 0xc6, 0xf7, 0x90, 0x4f, 0x51, 0x8b, 0x51, 0x3a, | ||||
| 	0xfe, 0x43, 0xe8, 0xfe, 0x3b, 0xf7, 0x8c, 0xa9, 0x15, 0x16, 0xd8, 0x1b, 0x3a, 0xa9, 0xb1, 0x23, | ||||
| 	0x96, 0x9a, 0x9e, 0xfb, 0xd1, 0xdd, 0x67, 0x8d, 0xdc, 0x1d, 0x62, 0xef, 0xea, 0xd7, 0x6c, 0x94, | ||||
| 	0x0c, 0xee, 0xdb, 0xb3, 0xaa, 0x56, 0xe5, 0xd0, 0x60, 0xdb, 0x9b, 0xb3, 0x3e, 0xa2, 0xc4, 0xce, | ||||
| 	0xe9, 0xc3, 0x21, 0xc5, 0x1f, 0x87, 0xe3, 0xfb, 0xb3, 0x53, 0x1c, 0x93, 0x1b, 0x23, 0xfb, 0x40, | ||||
| 	0x0f, 0x86, 0x31, 0xcb, 0xbb, 0x0c, 0xd3, 0x7c, 0x0f, 0x37, 0x87, 0xbb, 0x9b, 0xdf, 0x6e, 0xb1, | ||||
| 	0x4b, 0x48, 0xc1, 0x26, 0x4f, 0x06, 0x14, 0x77, 0x08, 0xe2, 0xf7, 0x57, 0xeb, 0x80, 0x5c, 0xaf, | ||||
| 	0x03, 0xf2, 0x7b, 0x1d, 0x90, 0xef, 0x9b, 0x60, 0x74, 0xbd, 0x09, 0x46, 0x3f, 0x37, 0xc1, 0xe8, | ||||
| 	0x33, 0x97, 0xa5, 0x9d, 0xb7, 0x79, 0x54, 0x68, 0xc5, 0x4f, 0xe5, 0x42, 0xe4, 0x86, 0x9f, 0xca, | ||||
| 	0x57, 0xc5, 0x5c, 0x94, 0x15, 0x5f, 0xfd, 0xff, 0xa9, 0xb6, 0xab, 0xc1, 0xe4, 0x13, 0xfc, 0xd1, | ||||
| 	0xd7, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x84, 0xf4, 0xab, 0x94, 0x02, 0x00, 0x00, | ||||
| } | ||||
| 
 | ||||
| func (m *Params) Marshal() (dAtA []byte, err error) { | ||||
| 	size := m.Size() | ||||
| 	dAtA = make([]byte, size) | ||||
| 	n, err := m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return dAtA[:n], nil | ||||
| } | ||||
| 
 | ||||
| func (m *Params) MarshalTo(dAtA []byte) (int, error) { | ||||
| 	size := m.Size() | ||||
| 	return m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| } | ||||
| 
 | ||||
| func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { | ||||
| 	i := len(dAtA) | ||||
| 	_ = i | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	if m.EpochBlocks != 0 { | ||||
| 		i = encodeVarintGenesis(dAtA, i, uint64(m.EpochBlocks)) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x20 | ||||
| 	} | ||||
| 	if m.MaxVotes != 0 { | ||||
| 		i = encodeVarintGenesis(dAtA, i, uint64(m.MaxVotes)) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x18 | ||||
| 	} | ||||
| 	if len(m.TokensPerVote) > 0 { | ||||
| 		i -= len(m.TokensPerVote) | ||||
| 		copy(dAtA[i:], m.TokensPerVote) | ||||
| 		i = encodeVarintGenesis(dAtA, i, uint64(len(m.TokensPerVote))) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x12 | ||||
| 	} | ||||
| 	if m.QuorumSize != 0 { | ||||
| 		i = encodeVarintGenesis(dAtA, i, uint64(m.QuorumSize)) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x8 | ||||
| 	} | ||||
| 	return len(dAtA) - i, nil | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) Marshal() (dAtA []byte, err error) { | ||||
| 	size := m.Size() | ||||
| 	dAtA = make([]byte, size) | ||||
| 	n, err := m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return dAtA[:n], nil | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { | ||||
| 	size := m.Size() | ||||
| 	return m.MarshalToSizedBuffer(dAtA[:size]) | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { | ||||
| 	i := len(dAtA) | ||||
| 	_ = i | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	if len(m.SignersByEpoch) > 0 { | ||||
| 		for iNdEx := len(m.SignersByEpoch) - 1; iNdEx >= 0; iNdEx-- { | ||||
| 			{ | ||||
| 				size, err := m.SignersByEpoch[iNdEx].MarshalToSizedBuffer(dAtA[:i]) | ||||
| 				if err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 				i -= size | ||||
| 				i = encodeVarintGenesis(dAtA, i, uint64(size)) | ||||
| 			} | ||||
| 			i-- | ||||
| 			dAtA[i] = 0x22 | ||||
| 		} | ||||
| 	} | ||||
| 	if len(m.Signers) > 0 { | ||||
| 		for iNdEx := len(m.Signers) - 1; iNdEx >= 0; iNdEx-- { | ||||
| 			{ | ||||
| 				size, err := m.Signers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) | ||||
| 				if err != nil { | ||||
| 					return 0, err | ||||
| 				} | ||||
| 				i -= size | ||||
| 				i = encodeVarintGenesis(dAtA, i, uint64(size)) | ||||
| 			} | ||||
| 			i-- | ||||
| 			dAtA[i] = 0x1a | ||||
| 		} | ||||
| 	} | ||||
| 	if m.EpochNumber != 0 { | ||||
| 		i = encodeVarintGenesis(dAtA, i, uint64(m.EpochNumber)) | ||||
| 		i-- | ||||
| 		dAtA[i] = 0x10 | ||||
| 	} | ||||
| 	{ | ||||
| 		size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		i -= size | ||||
| 		i = encodeVarintGenesis(dAtA, i, uint64(size)) | ||||
| 	} | ||||
| 	i-- | ||||
| 	dAtA[i] = 0xa | ||||
| 	return len(dAtA) - i, nil | ||||
| } | ||||
| 
 | ||||
| func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { | ||||
| 	offset -= sovGenesis(v) | ||||
| 	base := offset | ||||
| 	for v >= 1<<7 { | ||||
| 		dAtA[offset] = uint8(v&0x7f | 0x80) | ||||
| 		v >>= 7 | ||||
| 		offset++ | ||||
| 	} | ||||
| 	dAtA[offset] = uint8(v) | ||||
| 	return base | ||||
| } | ||||
| func (m *Params) Size() (n int) { | ||||
| 	if m == nil { | ||||
| 		return 0 | ||||
| 	} | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	if m.QuorumSize != 0 { | ||||
| 		n += 1 + sovGenesis(uint64(m.QuorumSize)) | ||||
| 	} | ||||
| 	l = len(m.TokensPerVote) | ||||
| 	if l > 0 { | ||||
| 		n += 1 + l + sovGenesis(uint64(l)) | ||||
| 	} | ||||
| 	if m.MaxVotes != 0 { | ||||
| 		n += 1 + sovGenesis(uint64(m.MaxVotes)) | ||||
| 	} | ||||
| 	if m.EpochBlocks != 0 { | ||||
| 		n += 1 + sovGenesis(uint64(m.EpochBlocks)) | ||||
| 	} | ||||
| 	return n | ||||
| } | ||||
| 
 | ||||
| func (m *GenesisState) Size() (n int) { | ||||
| 	if m == nil { | ||||
| 		return 0 | ||||
| 	} | ||||
| 	var l int | ||||
| 	_ = l | ||||
| 	l = m.Params.Size() | ||||
| 	n += 1 + l + sovGenesis(uint64(l)) | ||||
| 	if m.EpochNumber != 0 { | ||||
| 		n += 1 + sovGenesis(uint64(m.EpochNumber)) | ||||
| 	} | ||||
| 	if len(m.Signers) > 0 { | ||||
| 		for _, e := range m.Signers { | ||||
| 			l = e.Size() | ||||
| 			n += 1 + l + sovGenesis(uint64(l)) | ||||
| 		} | ||||
| 	} | ||||
| 	if len(m.SignersByEpoch) > 0 { | ||||
| 		for _, e := range m.SignersByEpoch { | ||||
| 			l = e.Size() | ||||
| 			n += 1 + l + sovGenesis(uint64(l)) | ||||
| 		} | ||||
| 	} | ||||
| 	return n | ||||
| } | ||||
| 
 | ||||
| func sovGenesis(x uint64) (n int) { | ||||
| 	return (math_bits.Len64(x|1) + 6) / 7 | ||||
| } | ||||
| func sozGenesis(x uint64) (n int) { | ||||
| 	return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) | ||||
| } | ||||
| func (m *Params) Unmarshal(dAtA []byte) error { | ||||
| 	l := len(dAtA) | ||||
| 	iNdEx := 0 | ||||
| 	for iNdEx < l { | ||||
| 		preIndex := iNdEx | ||||
| 		var wire uint64 | ||||
| 		for shift := uint(0); ; shift += 7 { | ||||
| 			if shift >= 64 { | ||||
| 				return ErrIntOverflowGenesis | ||||
| 			} | ||||
| 			if iNdEx >= l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			b := dAtA[iNdEx] | ||||
| 			iNdEx++ | ||||
| 			wire |= uint64(b&0x7F) << shift | ||||
| 			if b < 0x80 { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		fieldNum := int32(wire >> 3) | ||||
| 		wireType := int(wire & 0x7) | ||||
| 		if wireType == 4 { | ||||
| 			return fmt.Errorf("proto: Params: wiretype end group for non-group") | ||||
| 		} | ||||
| 		if fieldNum <= 0 { | ||||
| 			return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) | ||||
| 		} | ||||
| 		switch fieldNum { | ||||
| 		case 1: | ||||
| 			if wireType != 0 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field QuorumSize", wireType) | ||||
| 			} | ||||
| 			m.QuorumSize = 0 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				m.QuorumSize |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		case 2: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field TokensPerVote", wireType) | ||||
| 			} | ||||
| 			var stringLen uint64 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				stringLen |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			intStringLen := int(stringLen) | ||||
| 			if intStringLen < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			postIndex := iNdEx + intStringLen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.TokensPerVote = string(dAtA[iNdEx:postIndex]) | ||||
| 			iNdEx = postIndex | ||||
| 		case 3: | ||||
| 			if wireType != 0 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field MaxVotes", wireType) | ||||
| 			} | ||||
| 			m.MaxVotes = 0 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				m.MaxVotes |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		case 4: | ||||
| 			if wireType != 0 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field EpochBlocks", wireType) | ||||
| 			} | ||||
| 			m.EpochBlocks = 0 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				m.EpochBlocks |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		default: | ||||
| 			iNdEx = preIndex | ||||
| 			skippy, err := skipGenesis(dAtA[iNdEx:]) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if (skippy < 0) || (iNdEx+skippy) < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			if (iNdEx + skippy) > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			iNdEx += skippy | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if iNdEx > l { | ||||
| 		return io.ErrUnexpectedEOF | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| func (m *GenesisState) Unmarshal(dAtA []byte) error { | ||||
| 	l := len(dAtA) | ||||
| 	iNdEx := 0 | ||||
| 	for iNdEx < l { | ||||
| 		preIndex := iNdEx | ||||
| 		var wire uint64 | ||||
| 		for shift := uint(0); ; shift += 7 { | ||||
| 			if shift >= 64 { | ||||
| 				return ErrIntOverflowGenesis | ||||
| 			} | ||||
| 			if iNdEx >= l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			b := dAtA[iNdEx] | ||||
| 			iNdEx++ | ||||
| 			wire |= uint64(b&0x7F) << shift | ||||
| 			if b < 0x80 { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		fieldNum := int32(wire >> 3) | ||||
| 		wireType := int(wire & 0x7) | ||||
| 		if wireType == 4 { | ||||
| 			return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") | ||||
| 		} | ||||
| 		if fieldNum <= 0 { | ||||
| 			return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) | ||||
| 		} | ||||
| 		switch fieldNum { | ||||
| 		case 1: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) | ||||
| 			} | ||||
| 			var msglen int | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				msglen |= int(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if msglen < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			postIndex := iNdEx + msglen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			iNdEx = postIndex | ||||
| 		case 2: | ||||
| 			if wireType != 0 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) | ||||
| 			} | ||||
| 			m.EpochNumber = 0 | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				m.EpochNumber |= uint64(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		case 3: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field Signers", wireType) | ||||
| 			} | ||||
| 			var msglen int | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				msglen |= int(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if msglen < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			postIndex := iNdEx + msglen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.Signers = append(m.Signers, &Signer{}) | ||||
| 			if err := m.Signers[len(m.Signers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			iNdEx = postIndex | ||||
| 		case 4: | ||||
| 			if wireType != 2 { | ||||
| 				return fmt.Errorf("proto: wrong wireType = %d for field SignersByEpoch", wireType) | ||||
| 			} | ||||
| 			var msglen int | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				msglen |= int(b&0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if msglen < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			postIndex := iNdEx + msglen | ||||
| 			if postIndex < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			if postIndex > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			m.SignersByEpoch = append(m.SignersByEpoch, &EpochSignerSet{}) | ||||
| 			if err := m.SignersByEpoch[len(m.SignersByEpoch)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			iNdEx = postIndex | ||||
| 		default: | ||||
| 			iNdEx = preIndex | ||||
| 			skippy, err := skipGenesis(dAtA[iNdEx:]) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			if (skippy < 0) || (iNdEx+skippy) < 0 { | ||||
| 				return ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			if (iNdEx + skippy) > l { | ||||
| 				return io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			iNdEx += skippy | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if iNdEx > l { | ||||
| 		return io.ErrUnexpectedEOF | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| func skipGenesis(dAtA []byte) (n int, err error) { | ||||
| 	l := len(dAtA) | ||||
| 	iNdEx := 0 | ||||
| 	depth := 0 | ||||
| 	for iNdEx < l { | ||||
| 		var wire uint64 | ||||
| 		for shift := uint(0); ; shift += 7 { | ||||
| 			if shift >= 64 { | ||||
| 				return 0, ErrIntOverflowGenesis | ||||
| 			} | ||||
| 			if iNdEx >= l { | ||||
| 				return 0, io.ErrUnexpectedEOF | ||||
| 			} | ||||
| 			b := dAtA[iNdEx] | ||||
| 			iNdEx++ | ||||
| 			wire |= (uint64(b) & 0x7F) << shift | ||||
| 			if b < 0x80 { | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 		wireType := int(wire & 0x7) | ||||
| 		switch wireType { | ||||
| 		case 0: | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return 0, ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return 0, io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				iNdEx++ | ||||
| 				if dAtA[iNdEx-1] < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 		case 1: | ||||
| 			iNdEx += 8 | ||||
| 		case 2: | ||||
| 			var length int | ||||
| 			for shift := uint(0); ; shift += 7 { | ||||
| 				if shift >= 64 { | ||||
| 					return 0, ErrIntOverflowGenesis | ||||
| 				} | ||||
| 				if iNdEx >= l { | ||||
| 					return 0, io.ErrUnexpectedEOF | ||||
| 				} | ||||
| 				b := dAtA[iNdEx] | ||||
| 				iNdEx++ | ||||
| 				length |= (int(b) & 0x7F) << shift | ||||
| 				if b < 0x80 { | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if length < 0 { | ||||
| 				return 0, ErrInvalidLengthGenesis | ||||
| 			} | ||||
| 			iNdEx += length | ||||
| 		case 3: | ||||
| 			depth++ | ||||
| 		case 4: | ||||
| 			if depth == 0 { | ||||
| 				return 0, ErrUnexpectedEndOfGroupGenesis | ||||
| 			} | ||||
| 			depth-- | ||||
| 		case 5: | ||||
| 			iNdEx += 4 | ||||
| 		default: | ||||
| 			return 0, fmt.Errorf("proto: illegal wireType %d", wireType) | ||||
| 		} | ||||
| 		if iNdEx < 0 { | ||||
| 			return 0, ErrInvalidLengthGenesis | ||||
| 		} | ||||
| 		if depth == 0 { | ||||
| 			return iNdEx, nil | ||||
| 		} | ||||
| 	} | ||||
| 	return 0, io.ErrUnexpectedEOF | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	ErrInvalidLengthGenesis        = fmt.Errorf("proto: negative length found during unmarshaling") | ||||
| 	ErrIntOverflowGenesis          = fmt.Errorf("proto: integer overflow") | ||||
| 	ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") | ||||
| ) | ||||
							
								
								
									
										43
									
								
								x/dasigners/v1/types/hash.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								x/dasigners/v1/types/hash.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	"math/big" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/crypto/bn254util" | ||||
| 	"github.com/consensys/gnark-crypto/ecc/bn254" | ||||
| 	"github.com/ethereum/go-ethereum/common" | ||||
| 	"github.com/ethereum/go-ethereum/crypto" | ||||
| 
 | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| ) | ||||
| 
 | ||||
| func PubkeyRegistrationHash(operatorAddress common.Address, chainId *big.Int) *bn254.G1Affine { | ||||
| 	toHash := make([]byte, 0) | ||||
| 	toHash = append(toHash, operatorAddress.Bytes()...) | ||||
| 	// make sure chainId is 32 bytes
 | ||||
| 	toHash = append(toHash, common.LeftPadBytes(chainId.Bytes(), 32)...) | ||||
| 	toHash = append(toHash, []byte("0G_BN254_Pubkey_Registration")...) | ||||
| 
 | ||||
| 	msgHash := crypto.Keccak256(toHash) | ||||
| 	// convert to [32]byte
 | ||||
| 	var msgHash32 [32]byte | ||||
| 	copy(msgHash32[:], msgHash) | ||||
| 
 | ||||
| 	// hash to G1
 | ||||
| 	return bn254util.MapToCurve(msgHash32) | ||||
| } | ||||
| 
 | ||||
| func EpochRegistrationHash(operatorAddress common.Address, epoch uint64, chainId *big.Int) *bn254.G1Affine { | ||||
| 	toHash := make([]byte, 0) | ||||
| 	toHash = append(toHash, operatorAddress.Bytes()...) | ||||
| 	toHash = append(toHash, sdk.Uint64ToBigEndian(epoch)...) | ||||
| 	toHash = append(toHash, common.LeftPadBytes(chainId.Bytes(), 32)...) | ||||
| 
 | ||||
| 	msgHash := crypto.Keccak256(toHash) | ||||
| 	// convert to [32]byte
 | ||||
| 	var msgHash32 [32]byte | ||||
| 	copy(msgHash32[:], msgHash) | ||||
| 
 | ||||
| 	// hash to G1
 | ||||
| 	return bn254util.MapToCurve(msgHash32) | ||||
| } | ||||
							
								
								
									
										10
									
								
								x/dasigners/v1/types/interfaces.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								x/dasigners/v1/types/interfaces.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" | ||||
| ) | ||||
| 
 | ||||
| type StakingKeeper interface { | ||||
| 	GetValidator(ctx sdk.Context, addr sdk.ValAddress) (validator stakingtypes.Validator, found bool) | ||||
| } | ||||
							
								
								
									
										45
									
								
								x/dasigners/v1/types/keys.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								x/dasigners/v1/types/keys.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 
 | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| 	// ModuleName The name that will be used throughout the module
 | ||||
| 	ModuleName = "da-signers" | ||||
| 
 | ||||
| 	// StoreKey Top level store key where all module items will be stored
 | ||||
| 	StoreKey = ModuleName | ||||
| 
 | ||||
| 	// QuerierRoute Top level query string
 | ||||
| 	QuerierRoute = ModuleName | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	// prefix
 | ||||
| 	SignerKeyPrefix         = []byte{0x00} | ||||
| 	EpochSignerSetKeyPrefix = []byte{0x01} | ||||
| 	RegistrationKeyPrefix   = []byte{0x02} | ||||
| 
 | ||||
| 	// keys
 | ||||
| 	ParamsKey      = []byte{0x05} | ||||
| 	EpochNumberKey = []byte{0x06} | ||||
| ) | ||||
| 
 | ||||
| func GetSignerKeyFromAccount(account string) ([]byte, error) { | ||||
| 	return hex.DecodeString(account) | ||||
| } | ||||
| 
 | ||||
| func GetEpochSignerSetKeyFromEpoch(epoch uint64) []byte { | ||||
| 	return sdk.Uint64ToBigEndian(epoch) | ||||
| } | ||||
| 
 | ||||
| func GetEpochRegistrationKeyPrefix(epoch uint64) []byte { | ||||
| 	return append(RegistrationKeyPrefix, sdk.Uint64ToBigEndian(epoch)...) | ||||
| } | ||||
| 
 | ||||
| func GetRegistrationKey(account string) ([]byte, error) { | ||||
| 	return hex.DecodeString(account) | ||||
| } | ||||
							
								
								
									
										96
									
								
								x/dasigners/v1/types/msg.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								x/dasigners/v1/types/msg.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 	fmt "fmt" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/crypto/bn254util" | ||||
| 
 | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| ) | ||||
| 
 | ||||
| var _, _, _ sdk.Msg = &MsgRegisterSigner{}, &MsgUpdateSocket{}, &MsgRegisterNextEpoch{} | ||||
| 
 | ||||
| // GetSigners returns the expected signers for a MsgRegister message.
 | ||||
| func (msg *MsgRegisterSigner) GetSigners() []sdk.AccAddress { | ||||
| 	valAddr, err := sdk.ValAddressFromHex(msg.Signer.Account) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	accAddr, err := sdk.AccAddressFromHexUnsafe(hex.EncodeToString(valAddr.Bytes())) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return []sdk.AccAddress{accAddr} | ||||
| } | ||||
| 
 | ||||
| // ValidateBasic does a sanity check of the provided data
 | ||||
| func (msg *MsgRegisterSigner) ValidateBasic() error { | ||||
| 	if err := msg.Signer.Validate(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if len(msg.Signature) != bn254util.G1PointSize { | ||||
| 		return fmt.Errorf("invalid signature") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // GetSignBytes implements the LegacyMsg interface.
 | ||||
| func (msg MsgRegisterSigner) GetSignBytes() []byte { | ||||
| 	return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) | ||||
| } | ||||
| 
 | ||||
| // GetSigners returns the expected signers for a MsgVote message.
 | ||||
| func (msg *MsgUpdateSocket) GetSigners() []sdk.AccAddress { | ||||
| 	valAddr, err := sdk.ValAddressFromHex(msg.Account) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	accAddr, err := sdk.AccAddressFromHexUnsafe(hex.EncodeToString(valAddr.Bytes())) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return []sdk.AccAddress{accAddr} | ||||
| } | ||||
| 
 | ||||
| // ValidateBasic does a sanity check of the provided data
 | ||||
| func (msg *MsgUpdateSocket) ValidateBasic() error { | ||||
| 	if err := ValidateHexAddress(msg.Account); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // GetSignBytes implements the LegacyMsg interface.
 | ||||
| func (msg MsgUpdateSocket) GetSignBytes() []byte { | ||||
| 	return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) | ||||
| } | ||||
| 
 | ||||
| // GetSigners returns the expected signers for a MsgVote message.
 | ||||
| func (msg *MsgRegisterNextEpoch) GetSigners() []sdk.AccAddress { | ||||
| 	valAddr, err := sdk.ValAddressFromHex(msg.Account) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	accAddr, err := sdk.AccAddressFromHexUnsafe(hex.EncodeToString(valAddr.Bytes())) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return []sdk.AccAddress{accAddr} | ||||
| } | ||||
| 
 | ||||
| // ValidateBasic does a sanity check of the provided data
 | ||||
| func (msg *MsgRegisterNextEpoch) ValidateBasic() error { | ||||
| 	if err := ValidateHexAddress(msg.Account); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if len(msg.Signature) != bn254util.G1PointSize { | ||||
| 		return fmt.Errorf("invalid signature") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // GetSignBytes implements the LegacyMsg interface.
 | ||||
| func (msg MsgRegisterNextEpoch) GetSignBytes() []byte { | ||||
| 	return sdk.MustSortJSON(AminoCdc.MustMarshalJSON(&msg)) | ||||
| } | ||||
							
								
								
									
										1648
									
								
								x/dasigners/v1/types/query.pb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1648
									
								
								x/dasigners/v1/types/query.pb.go
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										402
									
								
								x/dasigners/v1/types/query.pb.gw.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										402
									
								
								x/dasigners/v1/types/query.pb.gw.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,402 @@ | ||||
| // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
 | ||||
| // source: zgc/dasigners/v1/query.proto
 | ||||
| 
 | ||||
| /* | ||||
| Package types is a reverse proxy. | ||||
| 
 | ||||
| It translates gRPC into RESTful JSON APIs. | ||||
| */ | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 
 | ||||
| 	"github.com/golang/protobuf/descriptor" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"github.com/grpc-ecosystem/grpc-gateway/runtime" | ||||
| 	"github.com/grpc-ecosystem/grpc-gateway/utilities" | ||||
| 	"google.golang.org/grpc" | ||||
| 	"google.golang.org/grpc/codes" | ||||
| 	"google.golang.org/grpc/grpclog" | ||||
| 	"google.golang.org/grpc/metadata" | ||||
| 	"google.golang.org/grpc/status" | ||||
| ) | ||||
| 
 | ||||
| // Suppress "imported and not used" errors
 | ||||
| var _ codes.Code | ||||
| var _ io.Reader | ||||
| var _ status.Status | ||||
| var _ = runtime.String | ||||
| var _ = utilities.NewDoubleArray | ||||
| var _ = descriptor.ForMessage | ||||
| var _ = metadata.Join | ||||
| 
 | ||||
| func request_Query_EpochNumber_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QueryEpochNumberRequest | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	msg, err := client.EpochNumber(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func local_request_Query_EpochNumber_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QueryEpochNumberRequest | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	msg, err := server.EpochNumber(ctx, &protoReq) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	filter_Query_EpochSignerSet_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} | ||||
| ) | ||||
| 
 | ||||
| func request_Query_EpochSignerSet_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QueryEpochSignerSetRequest | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	if err := req.ParseForm(); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EpochSignerSet_0); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := client.EpochSignerSet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func local_request_Query_EpochSignerSet_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QueryEpochSignerSetRequest | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	if err := req.ParseForm(); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EpochSignerSet_0); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := server.EpochSignerSet(ctx, &protoReq) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	filter_Query_AggregatePubkeyG1_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} | ||||
| ) | ||||
| 
 | ||||
| func request_Query_AggregatePubkeyG1_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QueryAggregatePubkeyG1Request | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	if err := req.ParseForm(); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AggregatePubkeyG1_0); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := client.AggregatePubkeyG1(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func local_request_Query_AggregatePubkeyG1_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QueryAggregatePubkeyG1Request | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	if err := req.ParseForm(); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_AggregatePubkeyG1_0); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := server.AggregatePubkeyG1(ctx, &protoReq) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	filter_Query_Signer_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} | ||||
| ) | ||||
| 
 | ||||
| func request_Query_Signer_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QuerySignerRequest | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	if err := req.ParseForm(); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Signer_0); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := client.Signer(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func local_request_Query_Signer_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | ||||
| 	var protoReq QuerySignerRequest | ||||
| 	var metadata runtime.ServerMetadata | ||||
| 
 | ||||
| 	if err := req.ParseForm(); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Signer_0); err != nil { | ||||
| 		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	msg, err := server.Signer(ctx, &protoReq) | ||||
| 	return msg, metadata, err | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // RegisterQueryHandlerServer registers the http handlers for service Query to "mux".
 | ||||
| // UnaryRPC     :call QueryServer directly.
 | ||||
| // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
 | ||||
| // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead.
 | ||||
| func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_EpochNumber_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		var stream runtime.ServerTransportStream | ||||
| 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := local_request_Query_EpochNumber_0(rctx, inboundMarshaler, server, req, pathParams) | ||||
| 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_EpochNumber_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_EpochSignerSet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		var stream runtime.ServerTransportStream | ||||
| 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := local_request_Query_EpochSignerSet_0(rctx, inboundMarshaler, server, req, pathParams) | ||||
| 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_EpochSignerSet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_AggregatePubkeyG1_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		var stream runtime.ServerTransportStream | ||||
| 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := local_request_Query_AggregatePubkeyG1_0(rctx, inboundMarshaler, server, req, pathParams) | ||||
| 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_AggregatePubkeyG1_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_Signer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		var stream runtime.ServerTransportStream | ||||
| 		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := local_request_Query_Signer_0(rctx, inboundMarshaler, server, req, pathParams) | ||||
| 		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_Signer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but
 | ||||
| // automatically dials to "endpoint" and closes the connection when "ctx" gets done.
 | ||||
| func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { | ||||
| 	conn, err := grpc.Dial(endpoint, opts...) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer func() { | ||||
| 		if err != nil { | ||||
| 			if cerr := conn.Close(); cerr != nil { | ||||
| 				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | ||||
| 			} | ||||
| 			return | ||||
| 		} | ||||
| 		go func() { | ||||
| 			<-ctx.Done() | ||||
| 			if cerr := conn.Close(); cerr != nil { | ||||
| 				grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | ||||
| 			} | ||||
| 		}() | ||||
| 	}() | ||||
| 
 | ||||
| 	return RegisterQueryHandler(ctx, mux, conn) | ||||
| } | ||||
| 
 | ||||
| // RegisterQueryHandler registers the http handlers for service Query to "mux".
 | ||||
| // The handlers forward requests to the grpc endpoint over "conn".
 | ||||
| func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { | ||||
| 	return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) | ||||
| } | ||||
| 
 | ||||
| // RegisterQueryHandlerClient registers the http handlers for service Query
 | ||||
| // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient".
 | ||||
| // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient"
 | ||||
| // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
 | ||||
| // "QueryClient" to call the correct interceptors.
 | ||||
| func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_EpochNumber_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := request_Query_EpochNumber_0(rctx, inboundMarshaler, client, req, pathParams) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_EpochNumber_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_EpochSignerSet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := request_Query_EpochSignerSet_0(rctx, inboundMarshaler, client, req, pathParams) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_EpochSignerSet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_AggregatePubkeyG1_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := request_Query_AggregatePubkeyG1_0(rctx, inboundMarshaler, client, req, pathParams) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_AggregatePubkeyG1_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	mux.Handle("GET", pattern_Query_Signer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | ||||
| 		ctx, cancel := context.WithCancel(req.Context()) | ||||
| 		defer cancel() | ||||
| 		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | ||||
| 		rctx, err := runtime.AnnotateContext(ctx, mux, req) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 		resp, md, err := request_Query_Signer_0(rctx, inboundMarshaler, client, req, pathParams) | ||||
| 		ctx = runtime.NewServerMetadataContext(ctx, md) | ||||
| 		if err != nil { | ||||
| 			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		forward_Query_Signer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | ||||
| 
 | ||||
| 	}) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	pattern_Query_EpochNumber_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"0gchain", "dasigners", "v1", "epoch-number"}, "", runtime.AssumeColonVerbOpt(false))) | ||||
| 
 | ||||
| 	pattern_Query_EpochSignerSet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"0gchain", "dasigners", "v1", "epoch-signer-set"}, "", runtime.AssumeColonVerbOpt(false))) | ||||
| 
 | ||||
| 	pattern_Query_AggregatePubkeyG1_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"0gchain", "dasigners", "v1", "aggregate-pubkey-g1"}, "", runtime.AssumeColonVerbOpt(false))) | ||||
| 
 | ||||
| 	pattern_Query_Signer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"0gchain", "dasigners", "v1", "signer"}, "", runtime.AssumeColonVerbOpt(false))) | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	forward_Query_EpochNumber_0 = runtime.ForwardResponseMessage | ||||
| 
 | ||||
| 	forward_Query_EpochSignerSet_0 = runtime.ForwardResponseMessage | ||||
| 
 | ||||
| 	forward_Query_AggregatePubkeyG1_0 = runtime.ForwardResponseMessage | ||||
| 
 | ||||
| 	forward_Query_Signer_0 = runtime.ForwardResponseMessage | ||||
| ) | ||||
							
								
								
									
										55
									
								
								x/dasigners/v1/types/signer.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								x/dasigners/v1/types/signer.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| package types | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 	fmt "fmt" | ||||
| 
 | ||||
| 	"github.com/0glabs/0g-chain/crypto/bn254util" | ||||
| 	"github.com/consensys/gnark-crypto/ecc/bn254" | ||||
| ) | ||||
| 
 | ||||
| func ValidateHexAddress(account string) error { | ||||
| 	addr, err := hex.DecodeString(account) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if len(addr) != 20 { | ||||
| 		return fmt.Errorf("invalid address length") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (s *Signer) Validate() error { | ||||
| 	if len(s.PubkeyG1) != bn254util.G1PointSize { | ||||
| 		return fmt.Errorf("invalid G1 pubkey length") | ||||
| 	} | ||||
| 	if len(s.PubkeyG2) != bn254util.G2PointSize { | ||||
| 		return fmt.Errorf("invalid G2 pubkey length") | ||||
| 	} | ||||
| 	if err := ValidateHexAddress(s.Account); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (s *Signer) ValidateSignature(hash *bn254.G1Affine, signature *bn254.G1Affine) bool { | ||||
| 	pubkeyG1 := bn254util.DeserializeG1(s.PubkeyG1) | ||||
| 	pubkeyG2 := bn254util.DeserializeG2(s.PubkeyG2) | ||||
| 	gamma := bn254util.Gamma(hash, signature, pubkeyG1, pubkeyG2) | ||||
| 
 | ||||
| 	// pairing
 | ||||
| 	P := [2]bn254.G1Affine{ | ||||
| 		*new(bn254.G1Affine).Add(signature, new(bn254.G1Affine).ScalarMultiplication(pubkeyG1, gamma)), | ||||
| 		*new(bn254.G1Affine).Add(hash, new(bn254.G1Affine).ScalarMultiplication(bn254util.GetG1Generator(), gamma)), | ||||
| 	} | ||||
| 	Q := [2]bn254.G2Affine{ | ||||
| 		*new(bn254.G2Affine).Neg(bn254util.GetG2Generator()), | ||||
| 		*pubkeyG2, | ||||
| 	} | ||||
| 
 | ||||
| 	ok, err := bn254.PairingCheck(P[:], Q[:]) | ||||
| 	if err != nil { | ||||
| 		return false | ||||
| 	} | ||||
| 	return ok | ||||
| } | ||||
							
								
								
									
										1312
									
								
								x/dasigners/v1/types/tx.pb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1312
									
								
								x/dasigners/v1/types/tx.pb.go
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user
	 MiniFrenchBread
						MiniFrenchBread