6
6
} from '@agoric/swingset-vat/src/vats/network' ;
7
7
import { E } from '@agoric/eventual-send' ;
8
8
import { Far } from '@agoric/marshal' ;
9
+ import { makeStore } from '@agoric/store' ;
10
+ import { installOnChain as installEconomyOnChain } from '@agoric/treasury/bundles/install-on-chain' ;
9
11
10
12
// this will return { undefined } until `ag-solo set-gci-ingress`
11
13
// has been run to update gci.js
@@ -66,25 +68,73 @@ export function buildRootObject(vatPowers, vatParameters) {
66
68
E ( vats . priceAuthority ) . makePriceAuthority ( ) ,
67
69
] ) ;
68
70
71
+ const {
72
+ nameHub : agoricNames ,
73
+ nameAdmin : agoricNamesAdmin ,
74
+ } = makeNameHubKit ( ) ;
75
+ const {
76
+ nameHub : namesByAddress ,
77
+ nameAdmin : namesByAddressAdmin ,
78
+ } = makeNameHubKit ( ) ;
79
+
80
+ async function installEconomy ( ) {
81
+ // Create a mapping from all the nameHubs we create to their corresponding
82
+ // nameAdmin.
83
+ const nameAdmins = makeStore ( ) ;
84
+ await Promise . all (
85
+ [ 'brand' , 'installation' , 'issuer' , 'instance' , 'uiConfig' ] . map (
86
+ async nm => {
87
+ const { nameHub, nameAdmin } = makeNameHubKit ( ) ;
88
+ await E ( agoricNamesAdmin ) . update ( nm , nameHub ) ;
89
+ nameAdmins . init ( nameHub , nameAdmin ) ;
90
+ } ,
91
+ ) ,
92
+ ) ;
93
+
94
+ // Install the economy, giving it access to the name admins we made.
95
+ await installEconomyOnChain ( {
96
+ agoricNames,
97
+ board,
98
+ chainTimerService,
99
+ nameAdmins,
100
+ priceAuthority,
101
+ zoe,
102
+ } ) ;
103
+ }
104
+
105
+ // Now we can bootstrap the economy!
106
+ await installEconomy ( ) ;
107
+ const centralIssuer = await E ( agoricNames ) . lookup ( 'issuer' , 'Moe' ) ;
108
+
109
+ const CENTRAL_ISSUER_ENTRY = [
110
+ CENTRAL_ISSUER_NAME ,
111
+ {
112
+ issuer : centralIssuer ,
113
+ mintValue : 0 ,
114
+ pursePetname : 'Local currency' ,
115
+ fakeTradesGivenCentral : [ [ 1 , 1 ] ] ,
116
+ } ,
117
+ ] ;
118
+
69
119
const issuerNameToRecord = noFakeCurrencies
70
120
? new Map ( )
71
121
: fakeIssuerNameToRecord ;
122
+ issuerNameToRecord . set ( ...CENTRAL_ISSUER_ENTRY ) ;
123
+
72
124
const issuerNames = [ ...issuerNameToRecord . keys ( ) ] ;
73
- const centralIssuerIndex = issuerNames . findIndex (
74
- issuerName => issuerName === CENTRAL_ISSUER_NAME ,
75
- ) ;
76
- // Make the other demo mints
77
125
const issuers = await Promise . all (
78
- issuerNames . map ( issuerName =>
79
- E ( vats . mints ) . makeMintAndIssuer (
126
+ issuerNames . map ( issuerName => {
127
+ const record = issuerNameToRecord . get ( issuerName ) ;
128
+ if ( record . issuer !== undefined ) {
129
+ return record . issuer ;
130
+ }
131
+ return E ( vats . mints ) . makeMintAndIssuer (
80
132
issuerName ,
81
- ...( issuerNameToRecord . get ( issuerName ) . issuerArgs || [ ] ) ,
82
- ) ,
83
- ) ,
133
+ ...( record . issuerArgs || [ ] ) ,
134
+ ) ;
135
+ } ) ,
84
136
) ;
85
137
86
- const centralIssuer = issuers [ centralIssuerIndex ] ;
87
-
88
138
/**
89
139
* @param {ERef<Issuer> } issuerIn
90
140
* @param {ERef<Issuer> } issuerOut
@@ -112,7 +162,7 @@ export function buildRootObject(vatPowers, vatParameters) {
112
162
} ;
113
163
await Promise . all (
114
164
issuers . map ( async ( issuer , i ) => {
115
- // Create priceAuthority pairs for centralIssuerIndex based on the
165
+ // Create priceAuthority pairs for centralIssuer based on the
116
166
// FakePriceAuthority.
117
167
console . debug ( `Creating ${ issuerNames [ i ] } -${ CENTRAL_ISSUER_NAME } ` ) ;
118
168
const { fakeTradesGivenCentral } = issuerNameToRecord . get (
@@ -135,15 +185,6 @@ export function buildRootObject(vatPowers, vatParameters) {
135
185
} ) ,
136
186
) ;
137
187
138
- const {
139
- nameHub : agoricNames ,
140
- nameAdmin : agoricNamesAdmin ,
141
- } = makeNameHubKit ( ) ;
142
- const {
143
- nameHub : namesByAddress ,
144
- nameAdmin : namesByAddressAdmin ,
145
- } = makeNameHubKit ( ) ;
146
-
147
188
return Far ( 'chainBundler' , {
148
189
async createUserBundle ( _nickname , address , powerFlags = [ ] ) {
149
190
// Bind to some fresh ports (unspecified name) on the IBC implementation
0 commit comments