Documentation ¶
Overview ¶
Package sc implements an auxiliary blockchain called Service Chain.
Service Chains in Klaytn are auxiliary blockchains independent from the Klaytn main chain. They mostly act like normal Klaytn blockchains but has additional features to connect them to another Klaytn network. They can be used as separate public/private blockchains or child chains of a Klaytn chain (or another Service Chain). The followings describe main features of Service chain.
- Anchoring block data of Service Chain
- Value Transfer (KLAY, KCT)
- Various bridge contract configurations
- Support high availability
Service Chain provides the inter-connectivity to another Klaytn chain through two bridges, MainBridge and SubBridge. Each bridge has a bridge contract on different blockchain networks and pairs up with another bridge to interact with. They are directly connected on the network layer and communicate with each other through p2p messages enabling inter-chain operations.
MainBridge is configured on the node of a parent chain and SubBridge is configured on the node of a child chain. Both of a Klaytn chain and a Service Chain can be a parent chain, but only a Service Chain can be a child chain. The block data of a child chain can be anchored to the bridge contract of MainBridge with the chain data anchoring transaction.
Unlike the block data anchoring, user data transfer is bi-directional. For example, users can transfer KLAY of Klaytn main chain to an address of a Service Chain or vice versa. This kind of inter-chain operation requires read/write ability on both chains but does not use MainBridge functions in the process. Instead of the MainBridge, the SubBridge in the child chain directly calls read/write operations to the parent chain node through RPC (In the basic configuration, the parent chain node is the same with the MainBridge enabled node). Of course, the accounts of both chains should be registered on the SubBridge to generate transactions. Following is the process of the KLAY transfer from Klaytn main chain to a Service Chain. 1. A user executes the inter-chain operation by sending a transaction with KLAY to the bridge contract of Klaytn main chain. 2. The bridge contract keeps KLAY on its account and creates an event for the inter-chain request. 3. The SubBridge subscribes the event log on the main chain node through RPC. 4. The SubBridge generates a transaction on the child chain node to the bridge contract of the SubBridge. 5. Finally, The bridge contract mints (or uses its KLAY) and sends KLAY to the target address.
Source Files ¶
Functions and variables related to Service Chain are defined in the files listed below.
- api_bridge.go : provides APIs for MainBridge or SubBridge.
- bridge_accounts.go : generates inter-chain transactions between a parent chain and a child chain.
- bridge_addr_journal.go : provides a journal mechanism for bridge addresses to provide the persistence service.
- bridge_manager.go : handles the bridge information and manages the bridge operations.
- bridgepeer.go : implements data structures of p2p peers used for Service Chain bridges.
- config.go : provides configurations of Service Chain nodes.
- gen_config.go : provides marshalling and unmarshalling functions of the Service Chain configuration.
- local_backend.go : provides read/write operations for the child chain block data.
- main_bridge_handler.go : implements a p2p message handler of MainBridge.
- main_event_handler.go : implements a event handler of MainBridge.
- mainbridge.go : implements MainBridge of the parent chain node.
- metrics.go : contains metrics used for sc package.
- protocol.go : defines protocols of Service Chain.
- remote_backend.go : provides read/write RPC calls for the parent chain block data.
- sub_bridge_handler.go : implements a p2p message handler of SubBridge.
- sub_event_handler.go : implements a event handler of SubBridge.
- subbridge.go : implements SubBridge of the child chain node.
- vt_recovery.go : provides recovery from the service failure for inter-chain value transfer.
Index ¶
- Constants
- Variables
- func CreateDB(ctx *node.ServiceContext, config *SCConfig, name string) database.DBManager
- func InitializeBridgeAccountKeystore(keystorePath string) (*keystore.KeyStore, common.Address, bool, error)
- func NewRpcClientP2P(sb *SubBridge) *rpc.Client
- func NewValueTransferRecovery(config *SCConfig, cBridgeInfo, pBridgeInfo *BridgeInfo) *valueTransferRecovery
- type Backend
- type BridgeAccounts
- func (ba *BridgeAccounts) GetBridgeOperators() map[string]interface{}
- func (ba *BridgeAccounts) GetChildOperatorFeePayer() common.Address
- func (ba *BridgeAccounts) GetParentOperatorFeePayer() common.Address
- func (ba *BridgeAccounts) SetChildOperatorFeePayer(feePayer common.Address) error
- func (ba *BridgeAccounts) SetParentOperatorFeePayer(feePayer common.Address) error
- type BridgeInfo
- func (bi *BridgeInfo) AddRequestValueTransferEvents(evs []*RequestValueTransferEvent)
- func (bi *BridgeInfo) DeregisterToken(token, counterpartToken common.Address) error
- func (bi *BridgeInfo) GetCounterPartToken(token common.Address) common.Address
- func (bi *BridgeInfo) GetCurrentBlockNumber() (uint64, error)
- func (bi *BridgeInfo) GetPendingRequestEvents() []*RequestValueTransferEvent
- func (bi *BridgeInfo) GetReadyRequestValueTransferEvents() []*RequestValueTransferEvent
- func (bi *BridgeInfo) MarkHandledNonce(nonce uint64)
- func (bi *BridgeInfo) RegisterToken(token, counterpartToken common.Address) error
- func (bi *BridgeInfo) SetHandleNonce(nonce uint64)
- func (bi *BridgeInfo) SetRequestNonce(nonce uint64)
- func (bi *BridgeInfo) SetRequestNonceFromCounterpart(nonce uint64)
- func (bi *BridgeInfo) UpdateInfo() error
- func (bi *BridgeInfo) UpdateLowerHandleNonce(nonce uint64)
- type BridgeJournal
- type BridgeManager
- func (bm *BridgeManager) AddRecovery(localAddress, remoteAddress common.Address) error
- func (bm *BridgeManager) DeleteBridgeInfo(addr common.Address) error
- func (bm *BridgeManager) DeleteRecovery(localAddress, remoteAddress common.Address) error
- func (bm *BridgeManager) DeployBridge(auth *bind.TransactOpts, backend bind.ContractBackend, local bool) (*bridgecontract.Bridge, common.Address, error)
- func (bm *BridgeManager) GetAllBridge() []*BridgeJournal
- func (bm *BridgeManager) GetBridgeInfo(addr common.Address) (*BridgeInfo, bool)
- func (bm *BridgeManager) GetCounterPartBridge(bridgeAddr common.Address) *bridgecontract.Bridge
- func (bm *BridgeManager) GetCounterPartBridgeAddr(bridgeAddr common.Address) common.Address
- func (bm *BridgeManager) GetERC20Fee(bridgeAddr, tokenAddr common.Address) (*big.Int, error)
- func (bm *BridgeManager) GetFeeReceiver(bridgeAddr common.Address) (common.Address, error)
- func (bm *BridgeManager) GetKLAYFee(bridgeAddr common.Address) (*big.Int, error)
- func (bm *BridgeManager) GetOperators(bridgeAddr common.Address) ([]common.Address, error)
- func (bm *BridgeManager) GetValueTransferOperatorThreshold(bridgeAddr common.Address) (uint8, error)
- func (bm *BridgeManager) IsValidBridgePair(bridge1, bridge2 common.Address) bool
- func (bm *BridgeManager) LogBridgeStatus()
- func (bm *BridgeManager) RegisterOperator(bridgeAddr, operatorAddr common.Address) (common.Hash, error)
- func (bm *BridgeManager) ResetAllSubscribedEvents() error
- func (bm *BridgeManager) RestoreBridges() error
- func (bm *BridgeManager) SetBridgeInfo(addr common.Address, bridge *bridgecontract.Bridge, cpAddr common.Address, ...) error
- func (bm *BridgeManager) SetERC20Fee(bridgeAddr, tokenAddr common.Address, fee *big.Int) (common.Hash, error)
- func (bm *BridgeManager) SetFeeReceiver(bridgeAddr, receiver common.Address) (common.Hash, error)
- func (bm *BridgeManager) SetJournal(localAddress, remoteAddress common.Address) error
- func (bm *BridgeManager) SetKLAYFee(bridgeAddr common.Address, fee *big.Int) (common.Hash, error)
- func (bm *BridgeManager) SetValueTransferOperatorThreshold(bridgeAddr common.Address, threshold uint8) (common.Hash, error)
- func (bm *BridgeManager) Stop()
- func (bm *BridgeManager) SubscribeEvent(addr common.Address) error
- func (bm *BridgeManager) SubscribeHandleEvent(ch chan<- *HandleValueTransferEvent) event.Subscription
- func (bm *BridgeManager) SubscribeRequestEvent(ch chan<- *RequestValueTransferEvent) event.Subscription
- func (bm *BridgeManager) UnsubscribeEvent(addr common.Address)
- type BridgePeer
- type BridgePeerInfo
- type BridgeTxPool
- type ChildChainEventHandler
- func (cce *ChildChainEventHandler) ConvertChildChainBlockHashToParentChainTxHash(scBlockHash common.Hash) common.Hash
- func (cce *ChildChainEventHandler) HandleChainHeadEvent(block *types.Block) error
- func (cce *ChildChainEventHandler) HandleLogsEvent(logs []*types.Log) error
- func (cce *ChildChainEventHandler) HandleTxEvent(tx *types.Transaction) error
- func (cce *ChildChainEventHandler) HandleTxsEvent(txs []*types.Transaction) error
- func (cce *ChildChainEventHandler) ProcessHandleEvent(ev *HandleValueTransferEvent) error
- func (cce *ChildChainEventHandler) ProcessRequestEvent(ev *RequestValueTransferEvent) error
- type HandleValueTransferEvent
- type LocalBackend
- func (lb *LocalBackend) BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error)
- func (lb *LocalBackend) CallContract(ctx context.Context, call klaytn.CallMsg, blockNumber *big.Int) ([]byte, error)
- func (lb *LocalBackend) ChainID(ctx context.Context) (*big.Int, error)
- func (lb *LocalBackend) CodeAt(ctx context.Context, contract common.Address, blockNumber *big.Int) ([]byte, error)
- func (lb *LocalBackend) CurrentBlockNumber(ctx context.Context) (uint64, error)
- func (lb *LocalBackend) EstimateGas(ctx context.Context, call klaytn.CallMsg) (gas uint64, err error)
- func (lb *LocalBackend) FilterLogs(ctx context.Context, query klaytn.FilterQuery) ([]types.Log, error)
- func (lb *LocalBackend) PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error)
- func (lb *LocalBackend) PendingNonceAt(ctx context.Context, account common.Address) (uint64, error)
- func (lb *LocalBackend) SendTransaction(ctx context.Context, tx *types.Transaction) error
- func (lb *LocalBackend) SubscribeFilterLogs(ctx context.Context, query klaytn.FilterQuery, ch chan<- types.Log) (klaytn.Subscription, error)
- func (lb *LocalBackend) SuggestGasPrice(ctx context.Context) (*big.Int, error)
- func (lb *LocalBackend) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error)
- type MainBridge
- func (mb *MainBridge) APIs() []rpc.API
- func (mb *MainBridge) AccountManager() *accounts.Manager
- func (mb *MainBridge) BridgePeerSet() *bridgePeerSet
- func (mb *MainBridge) ChainDB() database.DBManager
- func (mb *MainBridge) Components() []interface{}
- func (mb *MainBridge) EventMux() *event.TypeMux
- func (mb *MainBridge) IsListening() bool
- func (mb *MainBridge) NetVersion() uint64
- func (mb *MainBridge) NodeInfo() *MainBridgeInfo
- func (mb *MainBridge) ProtocolVersion() int
- func (mb *MainBridge) Protocols() []p2p.Protocol
- func (mb *MainBridge) SCProtocol() SCProtocol
- func (mb *MainBridge) SendRPCResponseData(data []byte) error
- func (mb *MainBridge) SetComponents(components []interface{})
- func (mb *MainBridge) Start(srvr p2p.Server) error
- func (mb *MainBridge) Stop() error
- type MainBridgeAPI
- type MainBridgeHandler
- type MainBridgeInfo
- type MainChainEventHandler
- func (mce *MainChainEventHandler) ConvertChildChainBlockHashToParentChainTxHash(scBlockHash common.Hash) common.Hash
- func (mce *MainChainEventHandler) GetChildChainIndexingEnabled() bool
- func (mce *MainChainEventHandler) GetLastIndexedBlockNumber() uint64
- func (mce *MainChainEventHandler) HandleChainHeadEvent(block *types.Block) error
- func (mce *MainChainEventHandler) HandleLogsEvent(logs []*types.Log) error
- func (mce *MainChainEventHandler) HandleTxEvent(tx *types.Transaction) error
- func (mce *MainChainEventHandler) HandleTxsEvent(txs []*types.Transaction) error
- func (mce *MainChainEventHandler) WriteLastIndexedBlockNumber(blockNum uint64)
- type PeerSetManager
- type RemoteBackend
- func (rb *RemoteBackend) BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error)
- func (rb *RemoteBackend) CallContract(ctx context.Context, call klaytn.CallMsg, blockNumber *big.Int) ([]byte, error)
- func (rb *RemoteBackend) ChainID(ctx context.Context) (*big.Int, error)
- func (rb *RemoteBackend) CodeAt(ctx context.Context, contract common.Address, blockNumber *big.Int) ([]byte, error)
- func (rb *RemoteBackend) CurrentBlockNumber(ctx context.Context) (uint64, error)
- func (rb *RemoteBackend) EstimateGas(ctx context.Context, msg klaytn.CallMsg) (uint64, error)
- func (rb *RemoteBackend) FilterLogs(ctx context.Context, query klaytn.FilterQuery) (result []types.Log, err error)
- func (rb *RemoteBackend) PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error)
- func (rb *RemoteBackend) PendingNonceAt(ctx context.Context, account common.Address) (uint64, error)
- func (rb *RemoteBackend) SendTransaction(ctx context.Context, tx *types.Transaction) error
- func (rb *RemoteBackend) SubscribeFilterLogs(ctx context.Context, query klaytn.FilterQuery, ch chan<- types.Log) (klaytn.Subscription, error)
- func (rb *RemoteBackend) SuggestGasPrice(ctx context.Context) (*big.Int, error)
- func (rb *RemoteBackend) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error)
- func (rb *RemoteBackend) TransactionReceiptRpcOutput(ctx context.Context, txHash common.Hash) (r map[string]interface{}, err error)
- type RemoteBackendInterface
- type RequestValueTransferEvent
- type SCConfig
- type SCProtocol
- type SubBridge
- func (sb *SubBridge) APIs() []rpc.API
- func (sb *SubBridge) AccountManager() *accounts.Manager
- func (sb *SubBridge) BridgePeerSet() *bridgePeerSet
- func (sb *SubBridge) ChainDB() database.DBManager
- func (sb *SubBridge) Components() []interface{}
- func (sb *SubBridge) EventMux() *event.TypeMux
- func (sb *SubBridge) GetAnchoringTx() bool
- func (sb *SubBridge) GetBridgeTxPool() BridgeTxPool
- func (sb *SubBridge) IsListening() bool
- func (sb *SubBridge) NetVersion() uint64
- func (sb *SubBridge) NodeInfo() *SubBridgeInfo
- func (sb *SubBridge) ProtocolVersion() int
- func (sb *SubBridge) Protocols() []p2p.Protocol
- func (sb *SubBridge) SCProtocol() SCProtocol
- func (sb *SubBridge) SendRPCData(data []byte) error
- func (sb *SubBridge) SetAnchoringTx(flag bool) bool
- func (sb *SubBridge) SetComponents(components []interface{})
- func (sb *SubBridge) SetRPCConn(conn net.Conn)
- func (sb *SubBridge) Start(srvr p2p.Server) error
- func (sb *SubBridge) Stop() error
- type SubBridgeAPI
- func (sb *SubBridgeAPI) AddPeer(url string) (bool, error)
- func (sb *SubBridgeAPI) Anchoring(flag bool) bool
- func (sb *SubBridgeAPI) ConvertChildChainBlockHashToParentChainTxHash(cBlockHash common.Hash) common.Hash
- func (sb *SubBridgeAPI) ConvertRequestTxHashToHandleTxHash(hash common.Hash) common.Hash
- func (sb *SubBridgeAPI) DeployBridge() ([]common.Address, error)
- func (sb *SubBridgeAPI) DeregisterBridge(cBridgeAddr common.Address, pBridgeAddr common.Address) error
- func (sb *SubBridgeAPI) DeregisterToken(cBridgeAddr, pBridgeAddr, cTokenAddr, pTokenAddr common.Address) error
- func (sb *SubBridgeAPI) GetAnchoring() bool
- func (sb *SubBridgeAPI) GetAnchoringPeriod() uint64
- func (sb *SubBridgeAPI) GetAnchoringTxHashByBlockNumber(bn uint64) common.Hash
- func (sb *SubBridgeAPI) GetBridgeInformation(bridgeAddr common.Address) (map[string]interface{}, error)
- func (sb *SubBridgeAPI) GetChildOperatorAddr() common.Address
- func (sb *SubBridgeAPI) GetChildOperatorBalance() (*big.Int, error)
- func (sb *SubBridgeAPI) GetChildOperatorFeePayer() common.Address
- func (sb *SubBridgeAPI) GetChildOperatorNonce() uint64
- func (sb *SubBridgeAPI) GetERC20Fee(bridgeAddr, tokenAddr common.Address) (*big.Int, error)
- func (sb *SubBridgeAPI) GetFeeReceiver(bridgeAddr common.Address) (common.Address, error)
- func (sb *SubBridgeAPI) GetKLAYFee(bridgeAddr common.Address) (*big.Int, error)
- func (sb *SubBridgeAPI) GetLatestAnchoredBlockNumber() uint64
- func (sb *SubBridgeAPI) GetOperators() map[string]interface{}
- func (sb *SubBridgeAPI) GetParentOperatorAddr() common.Address
- func (sb *SubBridgeAPI) GetParentOperatorBalance() (*big.Int, error)
- func (sb *SubBridgeAPI) GetParentOperatorFeePayer() common.Address
- func (sb *SubBridgeAPI) GetParentOperatorNonce() uint64
- func (sb *SubBridgeAPI) GetParentTransactionReceipt(txHash common.Hash) (map[string]interface{}, error)
- func (sb *SubBridgeAPI) GetReceiptFromParentChain(blockHash common.Hash) *types.Receipt
- func (sb *SubBridgeAPI) GetRegisteredOperators(bridgeAddr common.Address) ([]common.Address, error)
- func (sb *SubBridgeAPI) GetSentChainTxsLimit() uint64
- func (sb *SubBridgeAPI) GetValueTransferOperatorThreshold(bridgeAddr common.Address) (uint8, error)
- func (sb *SubBridgeAPI) ListBridge() []*BridgeJournal
- func (sb *SubBridgeAPI) LockChildOperator() error
- func (sb *SubBridgeAPI) LockParentOperator() error
- func (sb *SubBridgeAPI) NodeInfo() (*p2p.NodeInfo, error)
- func (sb *SubBridgeAPI) Peers() ([]*p2p.PeerInfo, error)
- func (sb *SubBridgeAPI) RegisterBridge(cBridgeAddr common.Address, pBridgeAddr common.Address) error
- func (sb *SubBridgeAPI) RegisterOperator(bridgeAddr, operatorAddr common.Address) (common.Hash, error)
- func (sb *SubBridgeAPI) RegisterToken(cBridgeAddr, pBridgeAddr, cTokenAddr, pTokenAddr common.Address) error
- func (sb *SubBridgeAPI) RemovePeer(url string) (bool, error)
- func (sb *SubBridgeAPI) SetChildOperatorFeePayer(feePayer common.Address) error
- func (sb *SubBridgeAPI) SetERC20Fee(bridgeAddr, tokenAddr common.Address, fee *big.Int) (common.Hash, error)
- func (sb *SubBridgeAPI) SetFeeReceiver(bridgeAddr, receiver common.Address) (common.Hash, error)
- func (sb *SubBridgeAPI) SetKLAYFee(bridgeAddr common.Address, fee *big.Int) (common.Hash, error)
- func (sb *SubBridgeAPI) SetParentOperatorFeePayer(feePayer common.Address) error
- func (sb *SubBridgeAPI) SetValueTransferOperatorThreshold(bridgeAddr common.Address, threshold uint8) (common.Hash, error)
- func (sb *SubBridgeAPI) SubscribeBridge(cBridgeAddr, pBridgeAddr common.Address) error
- func (sb *SubBridgeAPI) TxPending() map[common.Address]types.Transactions
- func (sb *SubBridgeAPI) TxPendingCount() int
- func (sb *SubBridgeAPI) UnlockChildOperator(passphrase string, duration *uint64) error
- func (sb *SubBridgeAPI) UnlockParentOperator(passphrase string, duration *uint64) error
- func (sb *SubBridgeAPI) UnsubscribeBridge(cBridgeAddr, pBridgeAddr common.Address) error
- type SubBridgeHandler
- func (sbh *SubBridgeHandler) GetAnchoringPeriod() uint64
- func (sbh *SubBridgeHandler) GetChildOperatorAddr() *common.Address
- func (sbh *SubBridgeHandler) GetLatestAnchoredBlockNumber() uint64
- func (sbh *SubBridgeHandler) GetParentOperatorAddr() *common.Address
- func (sbh *SubBridgeHandler) GetReceiptFromParentChain(blockHash common.Hash) *types.Receipt
- func (sbh *SubBridgeHandler) GetSentChainTxsLimit() uint64
- func (sbh *SubBridgeHandler) HandleMainMsg(p BridgePeer, msg p2p.Msg) error
- func (sbh *SubBridgeHandler) LocalChainHeadEvent(block *types.Block)
- func (sbh *SubBridgeHandler) LockParentOperator()
- func (sbh *SubBridgeHandler) RegisterNewPeer(p BridgePeer) error
- func (scpm *SubBridgeHandler) SyncNonceAndGasPrice()
- func (sbh *SubBridgeHandler) UnLockParentOperator()
- func (sbh *SubBridgeHandler) UpdateLatestTxCountAddedBlockNumber(newLatestAnchoredBN uint64)
- func (sbh *SubBridgeHandler) WriteAnchoredBlockNumber(blockNum uint64)
- func (sbh *SubBridgeHandler) WriteReceiptFromParentChain(blockHash common.Hash, receipt *types.Receipt)
- type SubBridgeInfo
Constants ¶
const ( TokenEventChanSize = 10000 BridgeAddrJournal = "bridge_addrs.rlp" )
const ( KLAY uint8 = iota ERC20 ERC721 )
const ( // Protocol messages belonging to servicechain/1 StatusMsg = 0x00 // Below message can be deprecated. ServiceChainTxsMsg = 0x01 ServiceChainReceiptResponseMsg = 0x02 ServiceChainReceiptRequestMsg = 0x03 ServiceChainParentChainInfoResponseMsg = 0x04 ServiceChainParentChainInfoRequestMsg = 0x05 ServiceChainCall = 0x06 ServiceChainResponse = 0x07 ServiceChainNotify = 0x08 )
const ( ErrMsgTooLarge = iota ErrDecode ErrInvalidMsgCode ErrProtocolVersionMismatch ErrNetworkIdMismatch ErrNoStatusMsg ErrUnexpectedTxType )
const (
DefaultBridgeTxGasLimit = 5000000
)
const ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message
const (
SyncRequestInterval = 10
)
Variables ¶
var ( ErrInvalidTokenPair = errors.New("invalid token pair") ErrNoBridgeInfo = errors.New("bridge information does not exist") ErrDuplicatedBridgeInfo = errors.New("bridge information is duplicated") ErrDuplicatedToken = errors.New("token is duplicated") ErrNoRecovery = errors.New("recovery does not exist") ErrAlreadySubscribed = errors.New("already subscribed") ErrBridgeRestore = errors.New("restoring bridges is failed") )
var ( SCProtocolName = "servicechain" SCProtocolVersion = []uint{1} SCProtocolLength = []uint64{9} )
var ( ErrVtrDisabled = errors.New("VTR is disabled") ErrVtrAlreadyStarted = errors.New("VTR is already started") )
var DefaultConfig = SCConfig{
NetworkId: 1,
MaxPeer: 1,
}
DefaultConfig contains default settings for use on the Klaytn main net.
var (
ErrGetServiceChainPHInCCEH = errors.New("ServiceChainPH isn't set in ChildChainEventHandler")
)
var (
ErrGetServiceChainPHInMCEH = errors.New("ServiceChainPH isn't set in MainChainEventHandler")
)
var (
ErrInvalidBridgePair = errors.New("invalid bridge pair")
)
var (
ErrRPCDecode = errors.New("failed to decode mainbridge rpc call message")
)
var (
NoParentPeerErr = errors.New("no parent peer")
)
Functions ¶
func InitializeBridgeAccountKeystore ¶ added in v1.1.0
func InitializeBridgeAccountKeystore(keystorePath string) (*keystore.KeyStore, common.Address, bool, error)
InitializeBridgeAccountKeystore initializes a keystore, imports existing keys, and tries to unlock the bridge account. This returns the 1st account of the wallet, its address, the lock status and the error.
func NewRpcClientP2P ¶ added in v1.1.0
func NewValueTransferRecovery ¶
func NewValueTransferRecovery(config *SCConfig, cBridgeInfo, pBridgeInfo *BridgeInfo) *valueTransferRecovery
NewValueTransferRecovery creates a new value transfer recovery structure.
Types ¶
type Backend ¶
type Backend interface { bind.ContractBackend CurrentBlockNumber(context.Context) (uint64, error) BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error) }
Backend wraps all methods for local and remote backend
type BridgeAccounts ¶ added in v1.1.0
type BridgeAccounts struct {
// contains filtered or unexported fields
}
BridgeAccounts manages bridge account for parent/child chain.
func NewBridgeAccounts ¶ added in v1.1.0
func NewBridgeAccounts(am *accounts.Manager, dataDir string, db feePayerDB) (*BridgeAccounts, error)
NewBridgeAccounts returns bridgeAccounts created by main/service bridge account keys.
func (*BridgeAccounts) GetBridgeOperators ¶ added in v1.1.0
func (ba *BridgeAccounts) GetBridgeOperators() map[string]interface{}
GetBridgeOperators returns the information of bridgeOperator.
func (*BridgeAccounts) GetChildOperatorFeePayer ¶ added in v1.3.0
func (ba *BridgeAccounts) GetChildOperatorFeePayer() common.Address
GetChildOperatorFeePayer can return the fee payer of child operator.
func (*BridgeAccounts) GetParentOperatorFeePayer ¶ added in v1.3.0
func (ba *BridgeAccounts) GetParentOperatorFeePayer() common.Address
GetParentOperatorFeePayer can return the fee payer of parent operator.
func (*BridgeAccounts) SetChildOperatorFeePayer ¶ added in v1.3.0
func (ba *BridgeAccounts) SetChildOperatorFeePayer(feePayer common.Address) error
SetChildOperatorFeePayer can set the fee payer of child operator.
func (*BridgeAccounts) SetParentOperatorFeePayer ¶ added in v1.3.0
func (ba *BridgeAccounts) SetParentOperatorFeePayer(feePayer common.Address) error
SetParentOperatorFeePayer can set the fee payer of parent operator.
type BridgeInfo ¶
type BridgeInfo struct {
// contains filtered or unexported fields
}
func NewBridgeInfo ¶
func NewBridgeInfo(sb *SubBridge, addr common.Address, bridge *bridgecontract.Bridge, cpAddr common.Address, cpBridge *bridgecontract.Bridge, account *accountInfo, local, subscribed bool, cpBackend Backend) (*BridgeInfo, error)
func (*BridgeInfo) AddRequestValueTransferEvents ¶
func (bi *BridgeInfo) AddRequestValueTransferEvents(evs []*RequestValueTransferEvent)
AddRequestValueTransferEvents adds events into the pendingRequestEvent.
func (*BridgeInfo) DeregisterToken ¶ added in v1.1.0
func (bi *BridgeInfo) DeregisterToken(token, counterpartToken common.Address) error
func (*BridgeInfo) GetCounterPartToken ¶ added in v1.1.0
func (bi *BridgeInfo) GetCounterPartToken(token common.Address) common.Address
func (*BridgeInfo) GetCurrentBlockNumber ¶ added in v1.2.0
func (bi *BridgeInfo) GetCurrentBlockNumber() (uint64, error)
GetCurrentBlockNumber returns a current block number for each local and remote backend.
func (*BridgeInfo) GetPendingRequestEvents ¶ added in v1.1.0
func (bi *BridgeInfo) GetPendingRequestEvents() []*RequestValueTransferEvent
func (*BridgeInfo) GetReadyRequestValueTransferEvents ¶
func (bi *BridgeInfo) GetReadyRequestValueTransferEvents() []*RequestValueTransferEvent
GetReadyRequestValueTransferEvents returns the processable events with the increasing nonce.
func (*BridgeInfo) MarkHandledNonce ¶ added in v1.3.0
func (bi *BridgeInfo) MarkHandledNonce(nonce uint64)
MarkHandledNonce marks the handled nonce and sets the handle nonce value.
func (*BridgeInfo) RegisterToken ¶ added in v1.1.0
func (bi *BridgeInfo) RegisterToken(token, counterpartToken common.Address) error
func (*BridgeInfo) SetHandleNonce ¶ added in v1.3.0
func (bi *BridgeInfo) SetHandleNonce(nonce uint64)
SetHandleNonce sets the handled nonce with a new nonce.
func (*BridgeInfo) SetRequestNonce ¶ added in v1.3.0
func (bi *BridgeInfo) SetRequestNonce(nonce uint64)
SetRequestNonce sets the request nonce of the bridge.
func (*BridgeInfo) SetRequestNonceFromCounterpart ¶ added in v1.3.0
func (bi *BridgeInfo) SetRequestNonceFromCounterpart(nonce uint64)
SetRequestNonceFromCounterpart sets the request nonce from counterpart bridge.
func (*BridgeInfo) UpdateInfo ¶
func (bi *BridgeInfo) UpdateInfo() error
func (*BridgeInfo) UpdateLowerHandleNonce ¶ added in v1.2.0
func (bi *BridgeInfo) UpdateLowerHandleNonce(nonce uint64)
UpdateLowerHandleNonce updates the lower handle nonce.
type BridgeJournal ¶
type BridgeJournal struct { ChildAddress common.Address `json:"childAddress"` ParentAddress common.Address `json:"parentAddress"` Subscribed bool `json:"subscribed"` }
type BridgeManager ¶
type BridgeManager struct {
// contains filtered or unexported fields
}
BridgeManager manages Bridge SmartContracts for value transfer between child chain and parent chain
func NewBridgeManager ¶
func NewBridgeManager(main *SubBridge) (*BridgeManager, error)
func (*BridgeManager) AddRecovery ¶
func (bm *BridgeManager) AddRecovery(localAddress, remoteAddress common.Address) error
AddRecovery starts value transfer recovery for a given addresses pair.
func (*BridgeManager) DeleteBridgeInfo ¶
func (bm *BridgeManager) DeleteBridgeInfo(addr common.Address) error
DeleteBridgeInfo deletes the bridge info of the specified address.
func (*BridgeManager) DeleteRecovery ¶
func (bm *BridgeManager) DeleteRecovery(localAddress, remoteAddress common.Address) error
DeleteRecovery deletes the journal and stop the value transfer recovery for a given address pair.
func (*BridgeManager) DeployBridge ¶
func (bm *BridgeManager) DeployBridge(auth *bind.TransactOpts, backend bind.ContractBackend, local bool) (*bridgecontract.Bridge, common.Address, error)
Deploy Bridge SmartContract on same node or remote node
func (*BridgeManager) GetAllBridge ¶
func (bm *BridgeManager) GetAllBridge() []*BridgeJournal
GetAllBridge returns a slice of journal cache.
func (*BridgeManager) GetBridgeInfo ¶
func (bm *BridgeManager) GetBridgeInfo(addr common.Address) (*BridgeInfo, bool)
GetBridge returns bridge contract of the specified address.
func (*BridgeManager) GetCounterPartBridge ¶ added in v1.1.0
func (bm *BridgeManager) GetCounterPartBridge(bridgeAddr common.Address) *bridgecontract.Bridge
func (*BridgeManager) GetCounterPartBridgeAddr ¶ added in v1.1.0
func (bm *BridgeManager) GetCounterPartBridgeAddr(bridgeAddr common.Address) common.Address
func (*BridgeManager) GetERC20Fee ¶ added in v1.1.0
GetERC20Fee returns the ERC20 transfer fee on the bridge contract.
func (*BridgeManager) GetFeeReceiver ¶ added in v1.1.0
GetFeeReceiver returns the receiver which can get fee of value transfer request.
func (*BridgeManager) GetKLAYFee ¶ added in v1.1.0
GetKLAYFee returns the KLAY transfer fee on the bridge contract.
func (*BridgeManager) GetOperators ¶ added in v1.2.0
func (*BridgeManager) GetValueTransferOperatorThreshold ¶ added in v1.2.0
func (bm *BridgeManager) GetValueTransferOperatorThreshold(bridgeAddr common.Address) (uint8, error)
func (*BridgeManager) IsValidBridgePair ¶ added in v1.1.0
func (bm *BridgeManager) IsValidBridgePair(bridge1, bridge2 common.Address) bool
func (*BridgeManager) LogBridgeStatus ¶
func (bm *BridgeManager) LogBridgeStatus()
LogBridgeStatus logs the bridge contract requested/handled nonce status as an information.
func (*BridgeManager) RegisterOperator ¶ added in v1.2.0
func (*BridgeManager) ResetAllSubscribedEvents ¶
func (bm *BridgeManager) ResetAllSubscribedEvents() error
resetAllSubscribedEvents resets watch logs and recreates a goroutine loop to handle event messages.
func (*BridgeManager) RestoreBridges ¶
func (bm *BridgeManager) RestoreBridges() error
RestoreBridges setups bridge subscription by using the journal cache.
func (*BridgeManager) SetBridgeInfo ¶
func (bm *BridgeManager) SetBridgeInfo(addr common.Address, bridge *bridgecontract.Bridge, cpAddr common.Address, cpBridge *bridgecontract.Bridge, account *accountInfo, local bool, subscribed bool) error
SetBridgeInfo stores the address and bridge pair with local/remote and subscription status.
func (*BridgeManager) SetERC20Fee ¶ added in v1.1.0
func (bm *BridgeManager) SetERC20Fee(bridgeAddr, tokenAddr common.Address, fee *big.Int) (common.Hash, error)
SetERC20Fee set the ERC20 transfer fee on the bridge contract.
func (*BridgeManager) SetFeeReceiver ¶ added in v1.1.0
SetFeeReceiver set the fee receiver which can get the fee of value transfer request.
func (*BridgeManager) SetJournal ¶
func (bm *BridgeManager) SetJournal(localAddress, remoteAddress common.Address) error
SetJournal inserts or updates journal for a given addresses pair.
func (*BridgeManager) SetKLAYFee ¶ added in v1.1.0
SetKLAYFee set the KLAY transfer fee on the bridge contract.
func (*BridgeManager) SetValueTransferOperatorThreshold ¶ added in v1.2.0
func (*BridgeManager) Stop ¶
func (bm *BridgeManager) Stop()
Stop closes a subscribed event scope of the bridge manager.
func (*BridgeManager) SubscribeEvent ¶
func (bm *BridgeManager) SubscribeEvent(addr common.Address) error
SubscribeEvent registers a subscription of BridgeERC20Received and BridgeTokenWithdrawn
func (*BridgeManager) SubscribeHandleEvent ¶ added in v1.1.0
func (bm *BridgeManager) SubscribeHandleEvent(ch chan<- *HandleValueTransferEvent) event.Subscription
SubscribeHandleEvent registers a subscription of RequestValueTransferEvent.
func (*BridgeManager) SubscribeRequestEvent ¶ added in v1.1.0
func (bm *BridgeManager) SubscribeRequestEvent(ch chan<- *RequestValueTransferEvent) event.Subscription
SubscribeRequestEvent registers a subscription of RequestValueTransferEvent.
func (*BridgeManager) UnsubscribeEvent ¶
func (bm *BridgeManager) UnsubscribeEvent(addr common.Address)
UnsubscribeEvent cancels the contract's watch logs and initializes the status.
type BridgePeer ¶
type BridgePeer interface { // Close signals the broadcast goroutine to terminate. Close() // Info gathers and returns a collection of metadata known about a peer. Info() *BridgePeerInfo Head() (hash common.Hash, td *big.Int) // AddToKnownTxs adds a transaction hash to knownTxsCache for the peer, ensuring that it // will never be propagated to this particular peer. AddToKnownTxs(hash common.Hash) // Send writes an RLP-encoded message with the given code. // data should have been encoded as an RLP list. Send(msgcode uint64, data interface{}) error // Handshake executes the Klaytn protocol handshake, negotiating version number, // network IDs, difficulties, head, genesis blocks, and onChildChain(if the node is on child chain for the peer) // and returning if the peer on the same chain or not and error. Handshake(network uint64, chainID, td *big.Int, head common.Hash) error // ConnType returns the conntype of the peer. ConnType() common.ConnType // GetID returns the id of the peer. GetID() string // GetP2PPeerID returns the id of the p2p.Peer. GetP2PPeerID() discover.NodeID // GetChainID returns the chain id of the peer. GetChainID() *big.Int // GetAddr returns the address of the peer. GetAddr() common.Address // SetAddr sets the address of the peer. SetAddr(addr common.Address) // GetVersion returns the version of the peer. GetVersion() int // KnowsTx returns if the peer is known to have the transaction, based on knownTxsCache. KnowsTx(hash common.Hash) bool // GetP2PPeer returns the p2p. GetP2PPeer() *p2p.Peer // GetRW returns the MsgReadWriter of the peer. GetRW() p2p.MsgReadWriter // Handle is the callback invoked to manage the life cycle of a Klaytn Peer. When // this function terminates, the Peer is disconnected. Handle(bn *MainBridge) error SendRequestRPC(data []byte) error SendResponseRPC(data []byte) error // SendServiceChainTxs sends child chain tx data to from child chain to parent chain. SendServiceChainTxs(txs types.Transactions) error // SendServiceChainInfoRequest sends a parentChainInfo request from child chain to parent chain. SendServiceChainInfoRequest(addr *common.Address) error // SendServiceChainInfoResponse sends a parentChainInfo from parent chain to child chain. // parentChainInfo includes nonce of an account and gasPrice in the parent chain. SendServiceChainInfoResponse(pcInfo *parentChainInfo) error // SendServiceChainReceiptRequest sends a receipt request from child chain to parent chain. SendServiceChainReceiptRequest(txHashes []common.Hash) error // SendServiceChainReceiptResponse sends a receipt as a response to request from child chain. SendServiceChainReceiptResponse(receipts []*types.ReceiptForStorage) error }
type BridgePeerInfo ¶
type BridgePeerInfo struct { Version int `json:"version"` // Klaytn Bridge protocol version negotiated Head string `json:"head"` // SHA3 hash of the peer's best owned block }
BridgePeerInfo represents a short summary of the Klaytn Bridge sub-protocol metadata known about a connected peer.
type BridgeTxPool ¶
type BridgeTxPool interface { GetMaxTxNonce(from *common.Address) uint64 AddLocal(tx *types.Transaction) error Stats() int Pending() map[common.Address]types.Transactions Get(hash common.Hash) *types.Transaction RemoveTx(tx *types.Transaction) error PendingTxHashesByAddress(from *common.Address, limit int) []common.Hash PendingTxsByAddress(from *common.Address, limit int) types.Transactions Stop() }
type ChildChainEventHandler ¶
type ChildChainEventHandler struct {
// contains filtered or unexported fields
}
func NewChildChainEventHandler ¶
func NewChildChainEventHandler(bridge *SubBridge, handler *SubBridgeHandler) (*ChildChainEventHandler, error)
func (*ChildChainEventHandler) ConvertChildChainBlockHashToParentChainTxHash ¶ added in v1.1.1
func (cce *ChildChainEventHandler) ConvertChildChainBlockHashToParentChainTxHash(scBlockHash common.Hash) common.Hash
ConvertChildChainBlockHashToParentChainTxHash returns a transaction hash of a transaction which contains AnchoringData, with the key made with given child chain block hash. Index is built when child chain indexing is enabled.
func (*ChildChainEventHandler) HandleChainHeadEvent ¶
func (cce *ChildChainEventHandler) HandleChainHeadEvent(block *types.Block) error
func (*ChildChainEventHandler) HandleLogsEvent ¶
func (cce *ChildChainEventHandler) HandleLogsEvent(logs []*types.Log) error
func (*ChildChainEventHandler) HandleTxEvent ¶
func (cce *ChildChainEventHandler) HandleTxEvent(tx *types.Transaction) error
func (*ChildChainEventHandler) HandleTxsEvent ¶
func (cce *ChildChainEventHandler) HandleTxsEvent(txs []*types.Transaction) error
func (*ChildChainEventHandler) ProcessHandleEvent ¶
func (cce *ChildChainEventHandler) ProcessHandleEvent(ev *HandleValueTransferEvent) error
func (*ChildChainEventHandler) ProcessRequestEvent ¶
func (cce *ChildChainEventHandler) ProcessRequestEvent(ev *RequestValueTransferEvent) error
type HandleValueTransferEvent ¶
type HandleValueTransferEvent struct {
*bridgecontract.BridgeHandleValueTransfer
}
HandleValueTransferEvent from Bridge contract
type LocalBackend ¶
type LocalBackend struct {
// contains filtered or unexported fields
}
TODO-Klaytn currently LocalBackend is only for ServiceChain, especially Bridge SmartContract
func NewLocalBackend ¶
func NewLocalBackend(main *SubBridge) (*LocalBackend, error)
func (*LocalBackend) CallContract ¶
func (*LocalBackend) CurrentBlockNumber ¶ added in v1.2.0
func (lb *LocalBackend) CurrentBlockNumber(ctx context.Context) (uint64, error)
CurrentBlockNumber returns a current block number.
func (*LocalBackend) EstimateGas ¶
func (*LocalBackend) FilterLogs ¶
func (lb *LocalBackend) FilterLogs(ctx context.Context, query klaytn.FilterQuery) ([]types.Log, error)
func (*LocalBackend) PendingCodeAt ¶
func (*LocalBackend) PendingNonceAt ¶
func (*LocalBackend) SendTransaction ¶
func (lb *LocalBackend) SendTransaction(ctx context.Context, tx *types.Transaction) error
func (*LocalBackend) SubscribeFilterLogs ¶
func (lb *LocalBackend) SubscribeFilterLogs(ctx context.Context, query klaytn.FilterQuery, ch chan<- types.Log) (klaytn.Subscription, error)
func (*LocalBackend) SuggestGasPrice ¶
func (*LocalBackend) TransactionReceipt ¶
type MainBridge ¶
type MainBridge struct { APIBackend *MainBridgeAPI // contains filtered or unexported fields }
MainBridge implements the main bridge of service chain.
func NewMainBridge ¶
func NewMainBridge(ctx *node.ServiceContext, config *SCConfig) (*MainBridge, error)
NewMainBridge creates a new MainBridge object (including the initialisation of the common MainBridge object)
func (*MainBridge) APIs ¶
func (mb *MainBridge) APIs() []rpc.API
APIs returns the collection of RPC services the Klaytn sc package offers. NOTE, some of these services probably need to be moved to somewhere else.
func (*MainBridge) AccountManager ¶
func (mb *MainBridge) AccountManager() *accounts.Manager
func (*MainBridge) BridgePeerSet ¶
func (mb *MainBridge) BridgePeerSet() *bridgePeerSet
BridgePeerSet implements PeerSetManager
func (*MainBridge) ChainDB ¶
func (mb *MainBridge) ChainDB() database.DBManager
func (*MainBridge) Components ¶
func (mb *MainBridge) Components() []interface{}
func (*MainBridge) EventMux ¶
func (mb *MainBridge) EventMux() *event.TypeMux
func (*MainBridge) IsListening ¶
func (mb *MainBridge) IsListening() bool
func (*MainBridge) NetVersion ¶
func (mb *MainBridge) NetVersion() uint64
func (*MainBridge) NodeInfo ¶
func (mb *MainBridge) NodeInfo() *MainBridgeInfo
NodeInfo retrieves some protocol metadata about the running host node.
func (*MainBridge) ProtocolVersion ¶
func (mb *MainBridge) ProtocolVersion() int
func (*MainBridge) Protocols ¶
func (mb *MainBridge) Protocols() []p2p.Protocol
Protocols implements node.Service, returning all the currently configured network protocols to start.
func (*MainBridge) SCProtocol ¶
func (mb *MainBridge) SCProtocol() SCProtocol
func (*MainBridge) SendRPCResponseData ¶ added in v1.1.0
func (mb *MainBridge) SendRPCResponseData(data []byte) error
func (*MainBridge) SetComponents ¶
func (mb *MainBridge) SetComponents(components []interface{})
func (*MainBridge) Start ¶
func (mb *MainBridge) Start(srvr p2p.Server) error
Start implements node.Service, starting all internal goroutines needed by the Klaytn protocol implementation.
func (*MainBridge) Stop ¶
func (mb *MainBridge) Stop() error
Stop implements node.Service, terminating all internal goroutines used by the Klaytn protocol.
type MainBridgeAPI ¶
type MainBridgeAPI struct {
// contains filtered or unexported fields
}
MainBridgeAPI Implementation for main-bridge node
func (*MainBridgeAPI) ConvertChildChainBlockHashToParentChainTxHash ¶ added in v1.1.1
func (mb *MainBridgeAPI) ConvertChildChainBlockHashToParentChainTxHash(scBlockHash common.Hash) common.Hash
func (*MainBridgeAPI) GetChildChainIndexingEnabled ¶
func (mb *MainBridgeAPI) GetChildChainIndexingEnabled() bool
type MainBridgeHandler ¶
type MainBridgeHandler struct {
// contains filtered or unexported fields
}
func NewMainBridgeHandler ¶
func NewMainBridgeHandler(scc *SCConfig, main *MainBridge) (*MainBridgeHandler, error)
func (*MainBridgeHandler) HandleSubMsg ¶
func (mbh *MainBridgeHandler) HandleSubMsg(p BridgePeer, msg p2p.Msg) error
type MainBridgeInfo ¶
type MainBridgeInfo struct { Network uint64 `json:"network"` // Klaytn network ID BlockScore *big.Int `json:"blockscore"` // Total blockscore of the host's blockchain Genesis common.Hash `json:"genesis"` // SHA3 hash of the host's genesis block Config *params.ChainConfig `json:"config"` // Chain configuration for the fork rules Head common.Hash `json:"head"` // SHA3 hash of the host's best owned block }
MainBridgeInfo represents a short summary of the Klaytn sub-protocol metadata known about the host peer.
type MainChainEventHandler ¶
type MainChainEventHandler struct {
// contains filtered or unexported fields
}
func NewMainChainEventHandler ¶
func NewMainChainEventHandler(bridge *MainBridge, handler *MainBridgeHandler) (*MainChainEventHandler, error)
func (*MainChainEventHandler) ConvertChildChainBlockHashToParentChainTxHash ¶ added in v1.1.1
func (mce *MainChainEventHandler) ConvertChildChainBlockHashToParentChainTxHash(scBlockHash common.Hash) common.Hash
ConvertChildChainBlockHashToParentChainTxHash returns a transaction hash of a transaction which contains AnchoringData, with the key made with given child chain block hash. Index is built when service chain indexing is enabled.
func (*MainChainEventHandler) GetChildChainIndexingEnabled ¶
func (mce *MainChainEventHandler) GetChildChainIndexingEnabled() bool
GetChildChainIndexingEnabled returns the current child chain indexing configuration.
func (*MainChainEventHandler) GetLastIndexedBlockNumber ¶
func (mce *MainChainEventHandler) GetLastIndexedBlockNumber() uint64
GetLastIndexedBlockNumber returns the last child block number indexed to chain DB.
func (*MainChainEventHandler) HandleChainHeadEvent ¶
func (mce *MainChainEventHandler) HandleChainHeadEvent(block *types.Block) error
func (*MainChainEventHandler) HandleLogsEvent ¶
func (mce *MainChainEventHandler) HandleLogsEvent(logs []*types.Log) error
func (*MainChainEventHandler) HandleTxEvent ¶
func (mce *MainChainEventHandler) HandleTxEvent(tx *types.Transaction) error
func (*MainChainEventHandler) HandleTxsEvent ¶
func (mce *MainChainEventHandler) HandleTxsEvent(txs []*types.Transaction) error
func (*MainChainEventHandler) WriteLastIndexedBlockNumber ¶
func (mce *MainChainEventHandler) WriteLastIndexedBlockNumber(blockNum uint64)
WriteLastIndexedBlockNumber writes the last child block number indexed to chain DB.
type PeerSetManager ¶
type PeerSetManager interface {
BridgePeerSet() *bridgePeerSet
}
type RemoteBackend ¶
type RemoteBackend struct {
// contains filtered or unexported fields
}
TODO-Klaytn currently RemoteBackend is only for ServiceChain, especially Bridge SmartContract
func NewRemoteBackend ¶
func NewRemoteBackend(sb *SubBridge) (*RemoteBackend, error)
func (*RemoteBackend) CallContract ¶
func (*RemoteBackend) CurrentBlockNumber ¶ added in v1.2.0
func (rb *RemoteBackend) CurrentBlockNumber(ctx context.Context) (uint64, error)
CurrentBlockNumber returns a current block number.
func (*RemoteBackend) EstimateGas ¶
func (*RemoteBackend) FilterLogs ¶
func (rb *RemoteBackend) FilterLogs(ctx context.Context, query klaytn.FilterQuery) (result []types.Log, err error)
func (*RemoteBackend) PendingCodeAt ¶
func (*RemoteBackend) PendingNonceAt ¶
func (*RemoteBackend) SendTransaction ¶
func (rb *RemoteBackend) SendTransaction(ctx context.Context, tx *types.Transaction) error
func (*RemoteBackend) SubscribeFilterLogs ¶
func (rb *RemoteBackend) SubscribeFilterLogs(ctx context.Context, query klaytn.FilterQuery, ch chan<- types.Log) (klaytn.Subscription, error)
func (*RemoteBackend) SuggestGasPrice ¶
func (*RemoteBackend) TransactionReceipt ¶
func (*RemoteBackend) TransactionReceiptRpcOutput ¶ added in v1.1.0
type RemoteBackendInterface ¶ added in v1.1.0
type RemoteBackendInterface interface { bind.ContractBackend TransactionReceiptRpcOutput(ctx context.Context, txHash common.Hash) (map[string]interface{}, error) BalanceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (*big.Int, error) }
RemoteBackendInterface wraps methods for remote backend
type RequestValueTransferEvent ¶
type RequestValueTransferEvent struct {
*bridgecontract.BridgeRequestValueTransfer
}
RequestValueTransferEvent from Bridge contract
func (RequestValueTransferEvent) Nonce ¶ added in v1.1.0
func (rEv RequestValueTransferEvent) Nonce() uint64
type SCConfig ¶
type SCConfig struct { // Name sets the instance name of the node. It must not contain the / character and is // used in the devp2p node identifier. The instance name is "kscn". If no // value is specified, the basename of the current executable is used. Name string `toml:"-"` // BridgeService EnabledMainBridge bool EnabledSubBridge bool DataDir string // Protocol options NetworkId uint64 // Network ID to use for selecting peers to connect to // Database options SkipBcVersionCheck bool `toml:"-"` DatabaseHandles int `toml:"-"` LevelDBCacheSize int TrieCacheSize int TrieTimeout time.Duration TrieBlockInterval uint ChildChainIndexing bool // Network MainBridgePort string SubBridgePort string MaxPeer int // ServiceChain ServiceChainConsensus string AnchoringPeriod uint64 SentChainTxsLimit uint64 ParentChainID uint64 VTRecovery bool VTRecoveryInterval uint64 Anchoring bool }
func (*SCConfig) MainBridges ¶
StaticNodes returns a list of node enode URLs configured as static nodes.
func (SCConfig) MarshalTOML ¶
MarshalTOML marshals as TOML.
func (*SCConfig) ResolvePath ¶
ResolvePath resolves path in the instance directory.
func (*SCConfig) UnmarshalTOML ¶
UnmarshalTOML unmarshals from TOML.
type SCProtocol ¶
type SCProtocol struct { // Official short name of the protocol used during capability negotiation. Name string // Supported versions of the Klaytn protocol (first is primary). Versions []uint // Number of implemented message corresponding to different protocol versions. Lengths []uint64 }
Protocol defines the protocol of the consensus
type SubBridge ¶
type SubBridge struct { APIBackend *SubBridgeAPI // contains filtered or unexported fields }
SubBridge implements the Klaytn consensus node service.
func NewSubBridge ¶
func NewSubBridge(ctx *node.ServiceContext, config *SCConfig) (*SubBridge, error)
New creates a new CN object (including the initialisation of the common CN object)
func (*SubBridge) APIs ¶
APIs returns the collection of RPC services the ethereum package offers. NOTE, some of these services probably need to be moved to somewhere else.
func (*SubBridge) AccountManager ¶
func (*SubBridge) BridgePeerSet ¶
func (sb *SubBridge) BridgePeerSet() *bridgePeerSet
implement PeerSetManager
func (*SubBridge) Components ¶
func (sb *SubBridge) Components() []interface{}
func (*SubBridge) GetAnchoringTx ¶
func (*SubBridge) GetBridgeTxPool ¶
func (sb *SubBridge) GetBridgeTxPool() BridgeTxPool
func (*SubBridge) IsListening ¶
func (*SubBridge) NetVersion ¶
func (*SubBridge) NodeInfo ¶
func (sb *SubBridge) NodeInfo() *SubBridgeInfo
NodeInfo retrieves some protocol metadata about the running host node.
func (*SubBridge) ProtocolVersion ¶
func (*SubBridge) Protocols ¶
Protocols implements node.Service, returning all the currently configured network protocols to start.
func (*SubBridge) SCProtocol ¶
func (sb *SubBridge) SCProtocol() SCProtocol
func (*SubBridge) SendRPCData ¶ added in v1.1.0
func (*SubBridge) SetAnchoringTx ¶
func (*SubBridge) SetComponents ¶
func (sb *SubBridge) SetComponents(components []interface{})
func (*SubBridge) SetRPCConn ¶ added in v1.1.0
type SubBridgeAPI ¶
type SubBridgeAPI struct {
// contains filtered or unexported fields
}
SubBridgeAPI Implementation for sub-bridge node
func (*SubBridgeAPI) AddPeer ¶
func (sb *SubBridgeAPI) AddPeer(url string) (bool, error)
AddPeer requests connecting to a remote node, and also maintaining the new connection at all times, even reconnecting if it is lost.
func (*SubBridgeAPI) Anchoring ¶
func (sb *SubBridgeAPI) Anchoring(flag bool) bool
func (*SubBridgeAPI) ConvertChildChainBlockHashToParentChainTxHash ¶ added in v1.1.1
func (sb *SubBridgeAPI) ConvertChildChainBlockHashToParentChainTxHash(cBlockHash common.Hash) common.Hash
func (*SubBridgeAPI) ConvertRequestTxHashToHandleTxHash ¶
func (sb *SubBridgeAPI) ConvertRequestTxHashToHandleTxHash(hash common.Hash) common.Hash
func (*SubBridgeAPI) DeployBridge ¶
func (sb *SubBridgeAPI) DeployBridge() ([]common.Address, error)
func (*SubBridgeAPI) DeregisterBridge ¶
func (*SubBridgeAPI) DeregisterToken ¶
func (sb *SubBridgeAPI) DeregisterToken(cBridgeAddr, pBridgeAddr, cTokenAddr, pTokenAddr common.Address) error
func (*SubBridgeAPI) GetAnchoring ¶
func (sb *SubBridgeAPI) GetAnchoring() bool
func (*SubBridgeAPI) GetAnchoringPeriod ¶
func (sb *SubBridgeAPI) GetAnchoringPeriod() uint64
func (*SubBridgeAPI) GetAnchoringTxHashByBlockNumber ¶ added in v1.2.0
func (sb *SubBridgeAPI) GetAnchoringTxHashByBlockNumber(bn uint64) common.Hash
func (*SubBridgeAPI) GetBridgeInformation ¶
func (sb *SubBridgeAPI) GetBridgeInformation(bridgeAddr common.Address) (map[string]interface{}, error)
func (*SubBridgeAPI) GetChildOperatorAddr ¶ added in v1.1.1
func (sb *SubBridgeAPI) GetChildOperatorAddr() common.Address
func (*SubBridgeAPI) GetChildOperatorBalance ¶ added in v1.2.0
func (sb *SubBridgeAPI) GetChildOperatorBalance() (*big.Int, error)
func (*SubBridgeAPI) GetChildOperatorFeePayer ¶ added in v1.3.0
func (sb *SubBridgeAPI) GetChildOperatorFeePayer() common.Address
GetChildOperatorFeePayer can return the child bridge operator's fee payer.
func (*SubBridgeAPI) GetChildOperatorNonce ¶ added in v1.1.1
func (sb *SubBridgeAPI) GetChildOperatorNonce() uint64
func (*SubBridgeAPI) GetERC20Fee ¶ added in v1.1.0
func (*SubBridgeAPI) GetFeeReceiver ¶ added in v1.1.0
func (*SubBridgeAPI) GetKLAYFee ¶ added in v1.1.0
func (*SubBridgeAPI) GetLatestAnchoredBlockNumber ¶
func (sb *SubBridgeAPI) GetLatestAnchoredBlockNumber() uint64
func (*SubBridgeAPI) GetOperators ¶ added in v1.1.0
func (sb *SubBridgeAPI) GetOperators() map[string]interface{}
GetOperators returns the information of bridge operators.
func (*SubBridgeAPI) GetParentOperatorAddr ¶ added in v1.1.1
func (sb *SubBridgeAPI) GetParentOperatorAddr() common.Address
func (*SubBridgeAPI) GetParentOperatorBalance ¶ added in v1.2.0
func (sb *SubBridgeAPI) GetParentOperatorBalance() (*big.Int, error)
func (*SubBridgeAPI) GetParentOperatorFeePayer ¶ added in v1.3.0
func (sb *SubBridgeAPI) GetParentOperatorFeePayer() common.Address
GetParentOperatorFeePayer can return the parent bridge operator's fee payer.
func (*SubBridgeAPI) GetParentOperatorNonce ¶ added in v1.1.1
func (sb *SubBridgeAPI) GetParentOperatorNonce() uint64
func (*SubBridgeAPI) GetParentTransactionReceipt ¶ added in v1.1.0
func (sb *SubBridgeAPI) GetParentTransactionReceipt(txHash common.Hash) (map[string]interface{}, error)
func (*SubBridgeAPI) GetReceiptFromParentChain ¶
func (sb *SubBridgeAPI) GetReceiptFromParentChain(blockHash common.Hash) *types.Receipt
func (*SubBridgeAPI) GetRegisteredOperators ¶ added in v1.2.0
func (*SubBridgeAPI) GetSentChainTxsLimit ¶
func (sb *SubBridgeAPI) GetSentChainTxsLimit() uint64
func (*SubBridgeAPI) GetValueTransferOperatorThreshold ¶ added in v1.2.0
func (sb *SubBridgeAPI) GetValueTransferOperatorThreshold(bridgeAddr common.Address) (uint8, error)
func (*SubBridgeAPI) ListBridge ¶
func (sb *SubBridgeAPI) ListBridge() []*BridgeJournal
func (*SubBridgeAPI) LockChildOperator ¶ added in v1.1.0
func (sb *SubBridgeAPI) LockChildOperator() error
LockChildOperator can lock the child bridge operator.
func (*SubBridgeAPI) LockParentOperator ¶ added in v1.1.0
func (sb *SubBridgeAPI) LockParentOperator() error
LockParentOperator can lock the parent bridge operator.
func (*SubBridgeAPI) NodeInfo ¶
func (sb *SubBridgeAPI) NodeInfo() (*p2p.NodeInfo, error)
NodeInfo retrieves all the information we know about the host node at the protocol granularity.
func (*SubBridgeAPI) Peers ¶
func (sb *SubBridgeAPI) Peers() ([]*p2p.PeerInfo, error)
Peers retrieves all the information we know about each individual peer at the protocol granularity.
func (*SubBridgeAPI) RegisterBridge ¶
func (*SubBridgeAPI) RegisterOperator ¶ added in v1.2.0
func (*SubBridgeAPI) RegisterToken ¶
func (sb *SubBridgeAPI) RegisterToken(cBridgeAddr, pBridgeAddr, cTokenAddr, pTokenAddr common.Address) error
func (*SubBridgeAPI) RemovePeer ¶
func (sb *SubBridgeAPI) RemovePeer(url string) (bool, error)
RemovePeer disconnects from a a remote node if the connection exists
func (*SubBridgeAPI) SetChildOperatorFeePayer ¶ added in v1.3.0
func (sb *SubBridgeAPI) SetChildOperatorFeePayer(feePayer common.Address) error
SetChildOperatorFeePayer can set the child bridge operator's fee payer.
func (*SubBridgeAPI) SetERC20Fee ¶ added in v1.1.0
func (*SubBridgeAPI) SetFeeReceiver ¶ added in v1.1.0
func (*SubBridgeAPI) SetKLAYFee ¶ added in v1.1.0
func (*SubBridgeAPI) SetParentOperatorFeePayer ¶ added in v1.3.0
func (sb *SubBridgeAPI) SetParentOperatorFeePayer(feePayer common.Address) error
SetParentOperatorFeePayer can set the parent bridge operator's fee payer.
func (*SubBridgeAPI) SetValueTransferOperatorThreshold ¶ added in v1.2.0
func (*SubBridgeAPI) SubscribeBridge ¶
func (sb *SubBridgeAPI) SubscribeBridge(cBridgeAddr, pBridgeAddr common.Address) error
SubscribeBridge enables the given child/parent chain bridges to subscribe the events.
func (*SubBridgeAPI) TxPending ¶
func (sb *SubBridgeAPI) TxPending() map[common.Address]types.Transactions
func (*SubBridgeAPI) TxPendingCount ¶
func (sb *SubBridgeAPI) TxPendingCount() int
func (*SubBridgeAPI) UnlockChildOperator ¶ added in v1.1.0
func (sb *SubBridgeAPI) UnlockChildOperator(passphrase string, duration *uint64) error
UnlockChildOperator can unlock the child bridge operator.
func (*SubBridgeAPI) UnlockParentOperator ¶ added in v1.1.0
func (sb *SubBridgeAPI) UnlockParentOperator(passphrase string, duration *uint64) error
UnlockParentOperator can unlock the parent bridge operator.
func (*SubBridgeAPI) UnsubscribeBridge ¶
func (sb *SubBridgeAPI) UnsubscribeBridge(cBridgeAddr, pBridgeAddr common.Address) error
UnsubscribeBridge disables the event subscription of the given child/parent chain bridges.
type SubBridgeHandler ¶
type SubBridgeHandler struct {
// contains filtered or unexported fields
}
func NewSubBridgeHandler ¶
func NewSubBridgeHandler(main *SubBridge) (*SubBridgeHandler, error)
func (*SubBridgeHandler) GetAnchoringPeriod ¶
func (sbh *SubBridgeHandler) GetAnchoringPeriod() uint64
GetAnchoringPeriod returns the period to make and send a chain transaction to parent chain.
func (*SubBridgeHandler) GetChildOperatorAddr ¶ added in v1.1.1
func (sbh *SubBridgeHandler) GetChildOperatorAddr() *common.Address
GetChildOperatorAddr returns a pointer of a hex address of an account used for child chain. If given as a parameter, it will use it. If not given, it will use the address of the public key derived from chainKey.
func (*SubBridgeHandler) GetLatestAnchoredBlockNumber ¶
func (sbh *SubBridgeHandler) GetLatestAnchoredBlockNumber() uint64
GetLatestAnchoredBlockNumber returns the latest block number whose data has been anchored to the parent chain.
func (*SubBridgeHandler) GetParentOperatorAddr ¶ added in v1.1.1
func (sbh *SubBridgeHandler) GetParentOperatorAddr() *common.Address
GetParentOperatorAddr returns a pointer of a hex address of an account used for parent chain. If given as a parameter, it will use it. If not given, it will use the address of the public key derived from chainKey.
func (*SubBridgeHandler) GetReceiptFromParentChain ¶
func (sbh *SubBridgeHandler) GetReceiptFromParentChain(blockHash common.Hash) *types.Receipt
GetReceiptFromParentChain returns a receipt received from parent chain to child chain with corresponding block hash. It assumes that a child chain has only one parent chain.
func (*SubBridgeHandler) GetSentChainTxsLimit ¶
func (sbh *SubBridgeHandler) GetSentChainTxsLimit() uint64
GetSentChainTxsLimit returns the maximum number of stored chain transactions for resending.
func (*SubBridgeHandler) HandleMainMsg ¶
func (sbh *SubBridgeHandler) HandleMainMsg(p BridgePeer, msg p2p.Msg) error
func (*SubBridgeHandler) LocalChainHeadEvent ¶
func (sbh *SubBridgeHandler) LocalChainHeadEvent(block *types.Block)
LocalChainHeadEvent deals with servicechain feature to generate/broadcast service chain transactions and request receipts.
func (*SubBridgeHandler) LockParentOperator ¶ added in v1.1.1
func (sbh *SubBridgeHandler) LockParentOperator()
func (*SubBridgeHandler) RegisterNewPeer ¶
func (sbh *SubBridgeHandler) RegisterNewPeer(p BridgePeer) error
func (*SubBridgeHandler) SyncNonceAndGasPrice ¶
func (scpm *SubBridgeHandler) SyncNonceAndGasPrice()
SyncNonceAndGasPrice requests the nonce of address used for service chain tx to parent chain peers.
func (*SubBridgeHandler) UnLockParentOperator ¶ added in v1.1.1
func (sbh *SubBridgeHandler) UnLockParentOperator()
func (*SubBridgeHandler) UpdateLatestTxCountAddedBlockNumber ¶ added in v1.2.0
func (sbh *SubBridgeHandler) UpdateLatestTxCountAddedBlockNumber(newLatestAnchoredBN uint64)
UpdateLatestTxCountAddedBlockNumber sets the latestTxCountAddedBlockNumber to the block number of the last anchoring tx which was added into bridge txPool.
func (*SubBridgeHandler) WriteAnchoredBlockNumber ¶
func (sbh *SubBridgeHandler) WriteAnchoredBlockNumber(blockNum uint64)
WriteAnchoredBlockNumber writes the block number whose data has been anchored to the parent chain.
func (*SubBridgeHandler) WriteReceiptFromParentChain ¶
func (sbh *SubBridgeHandler) WriteReceiptFromParentChain(blockHash common.Hash, receipt *types.Receipt)
WriteReceiptFromParentChain writes a receipt received from parent chain to child chain with corresponding block hash. It assumes that a child chain has only one parent chain.
type SubBridgeInfo ¶
type SubBridgeInfo struct { Network uint64 `json:"network"` // Klaytn network ID Genesis common.Hash `json:"genesis"` // SHA3 hash of the host's genesis block Config *params.ChainConfig `json:"config"` // Chain configuration for the fork rules Head common.Hash `json:"head"` // SHA3 hash of the host's best owned block ChainID *big.Int `json:"chainid"` // ChainID }
NodeInfo represents a short summary of the ServiceChain sub-protocol metadata known about the host peer.
Source Files ¶
- api_bridge.go
- bridge_accounts.go
- bridge_addr_journal.go
- bridge_manager.go
- bridgepeer.go
- config.go
- doc.go
- gen_config.go
- local_backend.go
- main_bridge_handler.go
- main_event_handler.go
- mainbridge.go
- metrics.go
- protocol.go
- remote_backend.go
- sub_bridge_handler.go
- sub_event_handler.go
- subbridge.go
- vt_recovery.go
Directories ¶
Path | Synopsis |
---|---|
Package bridgepool implements a pool of transactions generated by RemoteBackend.
|
Package bridgepool implements a pool of transactions generated by RemoteBackend. |