Tunnel Messages
Update Route
The tunnel creator can update the route information by broadcasting a MsgUpdateRoute
message to BandChain. The fields that can be modified depend on the specific route type that was initially set for the tunnel. Note that the route type itself cannot be changed after tunnel creation - only parameters within the same route type can be updated.
message MsgUpdateRoute {
option (cosmos.msg.v1.signer) = "creator";
option (amino.name) = "tunnel/MsgUpdateRoute";
// tunnel_id is the ID of the tunnel to edit.
uint64 tunnel_id = 1 [(gogoproto.customname) = "TunnelID"];
// route is the route for delivering the signal prices
google.protobuf.Any route = 2 [(cosmos_proto.accepts_interface) = "RouteI"];
// creator is the address of the creator.
string creator = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
Withdraw Fee Payer Funds
The tunnel creator can withdraw funds from the tunnel fee payer address by broadcasting a MsgWithdrawFeePayerFunds
message to BandChain.
message MsgWithdrawFeePayerFunds {
option (cosmos.msg.v1.signer) = "creator";
option (amino.name) = "tunnel/MsgWithdrawFeePayerFunds";
// tunnel_id is the ID of the tunnel to withdraw fee payer coins.
uint64 tunnel_id = 1 [(gogoproto.customname) = "TunnelID"];
// amount is the coins to withdraw.
repeated cosmos.base.v1beta1.Coin amount = 2 [
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
(amino.dont_omitempty) = true
];
// creator is the address of the creator.
string creator = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
Activate Tunnel
If a tunnel runs out of funds to pay for data delivery fees or if packet production fails, it will be deactivated and stop checking for delivery conditions. To re-enable the tunnel, the creator can send BAND tokens to the tunnel’s deposit address or investigate the packet production failure reason and broadcast a MsgActivateTunnel
message to BandChain.
message MsgActivateTunnel {
option (cosmos.msg.v1.signer) = "creator";
option (amino.name) = "tunnel/MsgActivateTunnel";
// tunnel_id is the ID of the tunnel to activate.
uint64 tunnel_id = 1 [(gogoproto.customname) = "TunnelID"];
// creator is the address of the creator.
string creator = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
Deactivate Tunnel
If a tunnel creator wants to temporarily halt packet production, they can broadcast a MsgDeactivateTunnel
message to BandChain. This action will prevent the tunnel from sending further packets. To resume packet production, the creator can later broadcast a MsgActivateTunnel
message.
message MsgDeactivateTunnel {
option (cosmos.msg.v1.signer) = "creator";
option (amino.name) = "tunnel/MsgDeactivateTunnel";
// tunnel_id is the ID of the tunnel to deactivate.
uint64 tunnel_id = 1 [(gogoproto.customname) = "TunnelID"];
// creator is the address of the creator.
string creator = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
Trigger Tunnel
While a tunnel triggers automatically based on its interval and price deviation specification, the tunnel's creator may manually trigger the tunnel's data delivery by broadcasting MsgTriggerTunnel
.
message MsgTriggerTunnel {
option (cosmos.msg.v1.signer) = "creator";
option (amino.name) = "tunnel/MsgTriggerTunnel";
// tunnel_id is the ID of the tunnel to manually trigger.
uint64 tunnel_id = 1 [(gogoproto.customname) = "TunnelID"];
// creator is the address of the creator.
string creator = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
Deposit To Tunnel
Anyone can contribute funds to an existing tunnel by broadcasting a MsgDepositToTunnel
message. This allows the tunnel to reach the required minimum deposit threshold. If needed, funds can also be withdrawn using a MsgWithdrawFromTunnel
message.
message MsgDepositToTunnel {
option (cosmos.msg.v1.signer) = "depositor";
option (amino.name) = "tunnel/MsgDepositToTunnel";
// tunnel_id defines the unique id of the tunnel.
uint64 tunnel_id = 1 [(gogoproto.customname) = "TunnelID"];
// amount to be deposited by depositor.
repeated cosmos.base.v1beta1.Coin amount = 2 [
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
(amino.dont_omitempty) = true
];
// depositor defines the deposit addresses from the tunnel.
string depositor = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}
Withdraw from Tunnel
Anyone who has previously deposited uband into a tunnel can withdraw their funds by broadcasting a MsgWithdrawFromTunnel
message when needed.
Note: If a withdrawal causes the total deposit in the tunnel to fall below the required minimum deposit, the tunnel will be automatically deactivated.
message MsgWithdrawFromTunnel {
option (cosmos.msg.v1.signer) = "withdrawer";
option (amino.name) = "tunnel/MsgWithdrawFromTunnel";
// tunnel_id defines the unique id of the tunnel.
uint64 tunnel_id = 1 [(gogoproto.customname) = "TunnelID"];
// amount to be withdrawn by withdrawer.
repeated cosmos.base.v1beta1.Coin amount = 2 [
(gogoproto.nullable) = false,
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins",
(amino.dont_omitempty) = true
];
// withdrawer defines the withdraw addresses from the tunnel.
string withdrawer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"];
}