Skip to content

Commit

Permalink
Merge pull request #1441 from Agoric/mfig/vattp-ibc
Browse files Browse the repository at this point in the history
Get VatTP-over-IBC into shape
  • Loading branch information
michaelfig authored Aug 12, 2020
2 parents c6e693c + 9b366d0 commit be2c030
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 22 deletions.
4 changes: 3 additions & 1 deletion packages/SwingSet/src/vats/comms/clist.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@ export function mapOutbound(state, remoteID, s, syscall) {
}
const owner = state.objectTable.get(s);
throw new Error(
`unimplemented three-party handoff (object ${s}) from ${owner} to ${remote.id})`,
`unimplemented three-party handoff (object ${s}) from ${owner} ${
getRemote(state, owner).name
} to ${remoteID} ${remote.name})`,
);
} else {
// allocated by kernel: a local vat is exposing an object to the
Expand Down
7 changes: 5 additions & 2 deletions packages/SwingSet/src/vats/vat-tp.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ export function buildRootObject(vatPowers) {
});
// B:
const { host, handler } = await agoric.vattp~.makeNetworkHost('ag-chain-A', comms);
const { host, handler } = await agoric.vattp~.makeNetworkHost('ag-chain-A', comms, console);
agoric.ibcport[1]~.connect('/ibc-port/portADDR/ordered/vattp-1', handler);
host~.lookup(helloAddress)~.hello()
*/

function makeNetworkHost(allegedName, comms) {
function makeNetworkHost(allegedName, comms, cons = console) {
const makeAddress = makeCounter(
n => `/alleged-name/${allegedName}/egress/${n}`,
);
Expand Down Expand Up @@ -130,6 +130,9 @@ export function buildRootObject(vatPowers) {
receivers.delete(connection);
console.warn(`deleting connection is not fully supported in comms`);
},
infoMessage(...args) {
E(cons).log('VatTP connection info:', ...args);
},
});

return harden({ host, handler });
Expand Down
34 changes: 23 additions & 11 deletions packages/cosmic-swingset/bin/ag-nchainz
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,30 @@ testnet)
i=$(echo $chainid | sed -e 's/^[^0-9]*//')
portstart=$(( $BASE_PORT + $i * $NUM_SOLOS ))
portend=$(( $portstart + $NUM_SOLOS - 1 ))
SOLO_ADDRS=()
SOLO_NAMES=()
POWER_FLAGS='["agoric.vattp"]'
egresses=
sep=''
for port in `seq $portstart $portend`; do
echo "Initializing ag-solo in $chainid/ag-solo-$port"
$SOLO init $chainid/ag-solo-$port --webport=$port
solo="$chainid/ag-solo-$port"
echo "Initializing ag-solo in $solo"
$SOLO init $solo --webport=$port
addr=$(cat $solo/ag-cosmos-helper-address)
$DAEMON add-genesis-account --home=$n0d \
--home-client=$chainid/ag-solo-$port/$CLI-statedir --keyring-backend=test \
--home-client=$solo/$CLI-statedir --keyring-backend=test \
ag-solo 1000uag
# Generate powerful SwingSet egresses.
egresses="$egresses$sep{\"nickname\":\"$solo\",\"peer\":\"$addr\",\"powerFlags\":$POWER_FLAGS}"
sep=,
done
"$thisdir/../../agoric-cli/bin/agoric" set-defaults ag-chain-cosmos $n0d/config
for node in `ls -d $chainid/n[1-9]* 2>/dev/null || true`; do
cp $n0d/config/genesis.json $node/$DAEMON/config/genesis.json
for node in `ls -d $chainid/n* 2>/dev/null || true`; do
[[ "$node/$DAEMON" == $n0d ]] || cp $n0d/config/genesis.json $node/$DAEMON/config/genesis.json
"$thisdir/../../agoric-cli/bin/agoric" set-defaults ag-chain-cosmos $node/$DAEMON/config
cp "$node/$DAEMON/config/genesis.json" "$node/$DAEMON/config/genesis-orig.json"
# Append the egresses to the genesis and reset bond_denom.
jq ".*{app_state:{staking:{params:{bond_denom:\"stake\"}},swingset:{egresses:(.app_state.swingset.egresses+[$egresses])}}}" \
"$node/$DAEMON/config/genesis-orig.json" > "$node/$DAEMON/config/genesis.json"
done
exit 0
;;
Expand All @@ -79,16 +92,15 @@ start-daemon)
fi
BASEDIR=$1
shift
ba=$($CLI --home "$BASEDIR/n0/$CLI" keys show n0 --keyring-backend=test | jq -r .address)
for solo in `ls -d $BASEDIR/ag-solo-* 2>&1`; do
cp -r "$BASEDIR/n0/$CLI/config" "$solo/$CLI-statedir/"
ba="$ba $(cat $solo/ag-cosmos-helper-address)"
done
echo "Starting BOOT_ADDRESS=$ba $DAEMON ${1+"$@"}"
# "$($CLI --home "$BASEDIR/n0/$CLI" keys show n0 --keyring-backend=test | jq -r .address)"
echo "Starting $DAEMON ${1+"$@"}"
if [[ $debug == yes ]]; then
DEBUG=agoric ROLE=two_chain BOOT_ADDRESS=$ba node --inspect-brk $(which $DAEMON) ${1+"$@"}
DEBUG=agoric ROLE=two_chain node --inspect-brk $(which $DAEMON) ${1+"$@"}
else
DEBUG=agoric ROLE=two_chain BOOT_ADDRESS=$ba $DAEMON ${1+"$@"}
DEBUG=agoric ROLE=two_chain $DAEMON ${1+"$@"}
fi
exit 0
;;
Expand Down
19 changes: 11 additions & 8 deletions packages/cosmic-swingset/lib/ag-solo/vats/bootstrap.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@ function parseArgs(argv) {
// Used for coordinating on an index in comms for the provisioning service
const PROVISIONER_INDEX = 1;

function makeVattpFrom(vats) {
const { vattp, comms } = vats;
return harden({
makeNetworkHost(allegedName, console = undefined) {
return E(vattp).makeNetworkHost(allegedName, comms, console);
},
});
}

export function buildRootObject(vatPowers, vatParameters) {
const { D } = vatPowers;
async function setupCommandDevice(httpVat, cmdDevice, roles) {
Expand Down Expand Up @@ -103,14 +112,9 @@ export function buildRootObject(vatPowers, vatParameters) {
}

const additionalPowers = {};
const { vattp, comms } = vats;
if (powerFlags.includes('agoric.vattp')) {
// Give the authority to create a new host for vattp to share objects with.
additionalPowers.vattp = {
makeNetworkHost(allegedName) {
return E(vattp).makeNetworkHost(allegedName, comms);
},
};
additionalPowers.vattp = makeVattpFrom(vats);
}

const pursePetnames = {
Expand Down Expand Up @@ -267,12 +271,11 @@ export function buildRootObject(vatPowers, vatParameters) {

return allComparable(
harden({
comms: vats.comms,
uploads,
spawner,
network: vats.network,
http: httpRegCallback,
vattp: vats.vattp,
vattp: makeVattpFrom(vats),
}),
);
}
Expand Down

0 comments on commit be2c030

Please sign in to comment.