Skip to content

Commit

Permalink
feat(cosmic-swingset): send powerFlags from tx provision-one
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelfig committed Jul 28, 2020
1 parent 6297c11 commit 69b2629
Show file tree
Hide file tree
Showing 12 changed files with 61 additions and 35 deletions.
8 changes: 5 additions & 3 deletions packages/agoric-cli/lib/set-defaults.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { basename } from 'path';
import { finishCosmosConfig, finishCosmosGenesis } from './chain-config';

export default async function setDefaultsMain(progname, rawArgs, powers, opts) {
const { anylogger, fs, path } = powers;
const { anylogger, fs } = powers;
const log = anylogger('agoric:set-defaults');

const [prog, configDir] = rawArgs.slice(1);
Expand All @@ -12,10 +13,11 @@ export default async function setDefaultsMain(progname, rawArgs, powers, opts) {

let configFile;
let genesisFile;
if (path.basename(configDir) === 'config.toml') {
const baseName = basename(configDir);
if (baseName === 'config.toml') {
configFile = configDir;
}
if (path.basename(configDir) === 'genesis.json') {
if (baseName === 'genesis.json') {
genesisFile = configDir;
}

Expand Down
4 changes: 2 additions & 2 deletions packages/cosmic-swingset/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,14 @@ t1-provision-one-with-powers:
addr=$$(cat t1/$(BASE_PORT)/ag-cosmos-helper-address); \
$(AGCH) --home=t1/bootstrap query swingset egress $$addr --chain-id=$(CHAIN_ID) || \
$(AGCH) --home=t1/bootstrap tx swingset provision-one --keyring-backend=test --from=bootstrap \
--gas=auto --gas-adjustment=1.3 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \
--gas=auto --gas-adjustment=1.4 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \
t1/$(BASE_PORT) $$addr agoric.vattp.makeNetworkHost | tee /dev/stderr | grep -q 'code: 0'

t1-provision-one:
addr=$$(cat t1/$(BASE_PORT)/ag-cosmos-helper-address); \
$(AGCH) --home=t1/bootstrap query swingset egress $$addr --chain-id=$(CHAIN_ID) || \
$(AGCH) --home=t1/bootstrap tx swingset provision-one --keyring-backend=test --from=bootstrap \
--gas=auto --gas-adjustment=1.3 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \
--gas=auto --gas-adjustment=1.4 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \
t1/$(BASE_PORT) $$addr | tee /dev/stderr | grep -q 'code: 0'

# Actually start the ag-solo.
Expand Down
17 changes: 11 additions & 6 deletions packages/cosmic-swingset/lib/ag-solo/vats/bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,7 @@ export function buildRootObject(vatPowers) {

const additionalPowers = {};
const { vattp, comms } = vats;
if (
giveMeAllTheAgoricPowers ||
powerFlags.includes('agoric.vattp.makeNetworkHost')
) {
if (powerFlags.includes('agoric.vattp.makeNetworkHost')) {
// Give the authority to create a new host for vattp to share objects with.
additionalPowers.vattp = {
makeNetworkHost(allegedName) {
Expand Down Expand Up @@ -211,9 +208,9 @@ export function buildRootObject(vatPowers) {
async fromBridge(_srcID, obj) {
switch (obj.type) {
case 'PLEASE_PROVISION': {
const { nickname, address } = obj;
const { nickname, address, powerFlags } = obj;
return E(vats.provisioning)
.pleaseProvision(nickname, address, PROVISIONER_INDEX)
.pleaseProvision(nickname, address, powerFlags)
.catch(e =>
console.error(
`Error provisioning ${nickname} ${address}:`,
Expand Down Expand Up @@ -404,6 +401,14 @@ export function buildRootObject(vatPowers) {
const demoProvider = harden({
// build a chain-side bundle for a client.
async getDemoBundle(nickname) {
if (giveMeAllTheAgoricPowers) {
// NOTE: This is a special exception to the security model,
// to give capabilities to all clients (since we are running
// locally with the `--give-me-all-the-agoric-powers` flag).
return chainBundler.createUserBundle(nickname, [
'agoric.vattp.makeNetworkHost',
]);
}
return chainBundler.createUserBundle(nickname);
},
});
Expand Down
4 changes: 2 additions & 2 deletions packages/cosmic-swingset/lib/ag-solo/vats/vat-provisioning.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export function buildRootObject(_vatPowers) {
vattp = v;
}

async function pleaseProvision(nickname, pubkey) {
async function pleaseProvision(nickname, pubkey, powerFlags = []) {
let chainBundle;
const fetch = harden({
getDemoBundle() {
Expand All @@ -32,7 +32,7 @@ export function buildRootObject(_vatPowers) {

// Do this here so that any side-effects don't happen unless
// the egress has been successfully added.
chainBundle = E(bundler).createUserBundle(nickname);
chainBundle = E(bundler).createUserBundle(nickname, powerFlags);
return { ingressIndex: INDEX };
}

Expand Down
2 changes: 1 addition & 1 deletion packages/cosmic-swingset/x/swingset/client/cli/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func GetQueryCmd(storeKey string, cdc *codec.Codec) *cobra.Command {
func GetCmdGetEgress(queryRoute string, cdc *codec.Codec) *cobra.Command {
return &cobra.Command{
Use: "egress [account]",
Short: "get egress nickname for account",
Short: "get egress info for account",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
cliCtx := context.NewCLIContext().WithCodec(cdc)
Expand Down
13 changes: 10 additions & 3 deletions packages/cosmic-swingset/x/swingset/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"bufio"
"fmt"
"io/ioutil"
"strings"

"github.com/spf13/cobra"

Expand Down Expand Up @@ -82,9 +83,9 @@ func GetCmdDeliver(cdc *codec.Codec) *cobra.Command {
// GetCmdProvision is the CLI command for sending a Provision transaction
func GetCmdProvisionOne(cdc *codec.Codec) *cobra.Command {
return &cobra.Command{
Use: "provision-one [nickname] [address]",
Use: "provision-one [nickname] [address] [power-flags]",
Short: "provision a single address",
Args: cobra.ExactArgs(2),
Args: cobra.RangeArgs(2, 3),

RunE: func(cmd *cobra.Command, args []string) error {
inBuf := bufio.NewReader(cmd.InOrStdin())
Expand All @@ -96,7 +97,13 @@ func GetCmdProvisionOne(cdc *codec.Codec) *cobra.Command {
if err != nil {
return err
}
msg := types.NewMsgProvision(args[0], addr, cliCtx.GetFromAddress())

var powerFlags []string
if len(args) > 2 {
powerFlags = strings.Split(args[2], ",")
}

msg := types.NewMsgProvision(args[0], addr, powerFlags, cliCtx.GetFromAddress())
if err := msg.ValidateBasic(); err != nil {
return err
}
Expand Down
7 changes: 4 additions & 3 deletions packages/cosmic-swingset/x/swingset/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@ func DefaultGenesisState() GenesisState {
func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState) []abci.ValidatorUpdate {
for _, egress := range data.Egresses {
msg := MsgProvision{
Address: egress.Peer,
Nickname: egress.Nickname,
Address: egress.Peer,
Nickname: egress.Nickname,
PowerFlags: egress.PowerFlags,
}
action := &provisionAction{
MsgProvision: msg,
Expand All @@ -57,7 +58,7 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, data GenesisState) []abci.Valid
}

// Reproduce the egress in our state.
egress := types.NewEgress(msg.Nickname, msg.Address)
egress := types.NewEgress(msg.Nickname, msg.Address, msg.PowerFlags)
err = keeper.SetEgress(ctx, egress)
if err != nil {
panic(err)
Expand Down
2 changes: 1 addition & 1 deletion packages/cosmic-swingset/x/swingset/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ func handleMsgProvision(ctx sdk.Context, keeper Keeper, msg MsgProvision) (*sdk.
}

// Create the account, if it doesn't already exist.
egress := types.NewEgress(msg.Nickname, msg.Address)
egress := types.NewEgress(msg.Nickname, msg.Address, msg.PowerFlags)
err = keeper.SetEgress(ctx, egress)
if err != nil {
return nil, err
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func queryEgress(ctx sdk.Context, bech32 string, req abci.RequestQuery, keeper K
return []byte{}, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, fmt.Sprintf("egress %s not found", bech32))
}

bz, err := codec.MarshalJSONIndent(keeper.cdc, types.QueryResEgress{egress.Nickname})
bz, err := codec.MarshalJSONIndent(keeper.cdc, types.QueryResEgress{egress.Nickname, egress.PowerFlags})
if err != nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrJSONMarshal, err.Error())
}
Expand Down
22 changes: 15 additions & 7 deletions packages/cosmic-swingset/x/swingset/internal/types/msgs.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,18 +118,20 @@ func (msg MsgSendPacket) Type() string {

// MsgProvision defines a Provision message
type MsgProvision struct {
Nickname string `json:"nickname" yaml:"nickname"`
Address sdk.AccAddress `json:"address" yaml:"address"`
Submitter sdk.AccAddress `json:"submitter" yaml:"submitter"`
Nickname string `json:"nickname" yaml:"nickname"`
Address sdk.AccAddress `json:"address" yaml:"address"`
PowerFlags []string `json:"powerFlags" yaml:"powerFlags"`
Submitter sdk.AccAddress `json:"submitter" yaml:"submitter"`
}

var _ sdk.Msg = &MsgProvision{}

func NewMsgProvision(nickname string, addr sdk.AccAddress, submitter sdk.AccAddress) MsgProvision {
func NewMsgProvision(nickname string, addr sdk.AccAddress, powerFlags []string, submitter sdk.AccAddress) MsgProvision {
return MsgProvision{
Nickname: nickname,
Address: addr,
Submitter: submitter,
Nickname: nickname,
Address: addr,
PowerFlags: powerFlags,
Submitter: submitter,
}
}

Expand All @@ -150,11 +152,17 @@ func (msg MsgProvision) ValidateBasic() error {
if len(msg.Nickname) == 0 {
return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "Nickname cannot be empty")
}
if msg.PowerFlags == nil {
msg.PowerFlags = []string{}
}
return nil
}

// GetSignBytes encodes the message for signing
func (msg MsgProvision) GetSignBytes() []byte {
if msg.PowerFlags == nil {
msg.PowerFlags = []string{}
}
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import (
)

type QueryResEgress struct {
Nickname string `json:"nickname"`
Nickname string `json:"nickname"`
PowerFlags []string `json:"powerFlags"`
}

func (r QueryResEgress) String() string {
Expand Down
12 changes: 7 additions & 5 deletions packages/cosmic-swingset/x/swingset/internal/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ import (
const EmptyMailboxValue = `"{\"outbox\":[], \"ack\":0}"`

type Egress struct {
Nickname string `json:"nickname"`
Peer sdk.AccAddress `json:"peer"`
Nickname string `json:"nickname"`
Peer sdk.AccAddress `json:"peer"`
PowerFlags []string `json:"powerFlags"`
}

func NewEgress(nickname string, peer sdk.AccAddress) Egress {
func NewEgress(nickname string, peer sdk.AccAddress, powerFlags []string) Egress {
return Egress{
Nickname: nickname,
Peer: peer,
Nickname: nickname,
Peer: peer,
PowerFlags: powerFlags,
}
}

Expand Down

0 comments on commit 69b2629

Please sign in to comment.