Skip to content

Commit c323c60

Browse files
Support new import syntax (#307)
* Enable new import syntax * Enable new import syntax
1 parent 1526389 commit c323c60

File tree

7 files changed

+201
-54
lines changed

7 files changed

+201
-54
lines changed

blockchain/contracts/contracts.go

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"embed"
2323
"fmt"
2424
"github.com/onflow/flow-cli/flowkit/config"
25+
"github.com/onflow/flow-go-sdk"
2526
)
2627

2728
// Embed all contracts in this folder
@@ -31,46 +32,44 @@ var contracts embed.FS
3132

3233
// Core defines core contract to be embedded, along with their locations in the emulator
3334
var Core = []config.Contract{
34-
/*
35-
{
36-
Name: "NonFungibleToken",
37-
Aliases: config.Aliases{
38-
config.Alias{
39-
Network: "emulator",
40-
Address: flow.HexToAddress("0xf8d6e0586b0a20c7"),
41-
},
35+
{
36+
Name: "FungibleToken",
37+
Aliases: config.Aliases{
38+
config.Alias{
39+
Network: "emulator",
40+
Address: flow.HexToAddress("0xee82856bf20e2aa6"),
4241
},
4342
},
44-
{
45-
Name: "FungibleToken",
46-
Aliases: config.Aliases{
47-
config.Alias{
48-
Network: "emulator",
49-
Address: flow.HexToAddress("0xee82856bf20e2aa6"),
50-
},
43+
},
44+
{
45+
Name: "NonFungibleToken",
46+
Aliases: config.Aliases{
47+
config.Alias{
48+
Network: "emulator",
49+
Address: flow.HexToAddress("0xf8d6e0586b0a20c7"),
5150
},
5251
},
53-
// TODO: Need to support new import schema in order to resolve core contracts
54-
55-
{
56-
Name: "FlowToken",
57-
Aliases: config.Aliases{
58-
config.Alias{
59-
Network: "emulator",
60-
Address: flow.HexToAddress("0x0ae53cb6e3f42a79"),
61-
},
62-
},
63-
},
64-
{
65-
Name: "MetadataViews",
66-
Aliases: config.Aliases{
67-
config.Alias{
68-
Network: "emulator",
69-
Address: flow.HexToAddress("0xf8d6e0586b0a20c7"),
70-
},
71-
},
52+
},
53+
/* TODO: Remove init args from FlowToken
54+
{
55+
Name: "FlowToken",
56+
Aliases: config.Aliases{
57+
config.Alias{
58+
Network: "emulator",
59+
Address: flow.HexToAddress("0x0ae53cb6e3f42a79"),
7260
},
61+
},
62+
},
7363
*/
64+
{
65+
Name: "MetadataViews",
66+
Aliases: config.Aliases{
67+
config.Alias{
68+
Network: "emulator",
69+
Address: flow.HexToAddress("0xf8d6e0586b0a20c7"),
70+
},
71+
},
72+
},
7473
}
7574

7675
func Included() []string {

blockchain/flowkit.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,12 @@ func (fk *flowKit) createServiceAccount() error {
291291
Address: flow.HexToAddress("0x01"),
292292
Key: serviceAccount.Key,
293293
})
294+
295+
state.Deployments().AddOrUpdate(config.Deployment{ // init empty deployment
296+
Network: config.EmulatorNetwork.Name,
297+
Account: "Service Account",
298+
})
299+
294300
return nil
295301
}
296302

@@ -327,12 +333,19 @@ func (fk *flowKit) createAccount() (*flow.Account, error) {
327333
return nil, err
328334
}
329335

336+
name := fmt.Sprintf("Account 0x0%d", len(state.Accounts().Names())-1)
337+
330338
state.Accounts().AddOrUpdate(&accounts.Account{
331-
Name: fmt.Sprintf("Account 0x0%d", len(state.Accounts().Names())-1),
339+
Name: name,
332340
Address: account.Address,
333341
Key: serviceAccount.Key,
334342
})
335343

344+
state.Deployments().AddOrUpdate(config.Deployment{ // init empty deployment
345+
Network: config.EmulatorNetwork.Name,
346+
Account: name,
347+
})
348+
336349
return account, nil
337350
}
338351

blockchain/flowkit_test.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package blockchain
2020

2121
import (
2222
"context"
23-
"fmt"
2423
"github.com/onflow/flow-cli/flowkit/accounts"
2524
"github.com/onflow/flow-go-sdk"
2625
"github.com/stretchr/testify/assert"
@@ -81,20 +80,12 @@ func Test_FlowJsonExport(t *testing.T) {
8180
flowJson, err := fk.getFlowJson()
8281
assert.NoError(t, err)
8382

84-
const CoreContracts = `"contracts": {
85-
"FungibleToken": {
83+
const FungibleToken = `"FungibleToken": {
8684
"source": "",
8785
"aliases": {
8886
"emulator": "ee82856bf20e2aa6"
8987
}
90-
},
91-
"NonFungibleToken": {
92-
"source": "",
93-
"aliases": {
94-
"emulator": "f8d6e0586b0a20c7"
95-
}
96-
}
97-
}`
88+
}`
9889

9990
const Networks = `"networks": {
10091
"emulator": "127.0.0.1:3569",
@@ -103,8 +94,7 @@ func Test_FlowJsonExport(t *testing.T) {
10394
"testnet": "access.devnet.nodes.onflow.org:9000"
10495
}`
10596

106-
fmt.Println(flowJson)
107-
assert.Contains(t, flowJson, CoreContracts)
97+
assert.Contains(t, flowJson, FungibleToken)
10898
assert.Contains(t, flowJson, Networks)
10999

110100
// Accounts

blockchain/projects_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,44 @@ func Test_DeployContract(t *testing.T) {
510510
require.NoError(t, err)
511511
require.Equal(t, args, deployment.Arguments)
512512
})
513+
514+
t.Run("deploy contract with new import syntax", func(t *testing.T) {
515+
projects, _, proj, _ := newWithSeededProject()
516+
517+
const contract = `
518+
pub contract HelloWorld {
519+
pub var A: Int
520+
pub init() { self.A = 5 }
521+
}`
522+
523+
const importContract = `
524+
import "HelloWorld"
525+
526+
pub contract Test {
527+
pub var B: Int
528+
pub init() { self.B = HelloWorld.A }
529+
}`
530+
531+
_, err := projects.DeployContract(proj.ID, model.NewAddressFromIndex(0), contract, nil)
532+
require.NoError(t, err)
533+
534+
_, err = projects.DeployContract(proj.ID, model.NewAddressFromIndex(0), importContract, nil)
535+
require.NoError(t, err)
536+
})
537+
538+
t.Run("import core contracts", func(t *testing.T) {
539+
projects, _, proj, _ := newWithSeededProject()
540+
541+
const contract = `
542+
import "FungibleToken"
543+
import "MetadataViews"
544+
import "NonFungibleToken"
545+
546+
pub contract Test {}`
547+
548+
_, err := projects.DeployContract(proj.ID, model.NewAddressFromIndex(0), contract, nil)
549+
require.NoError(t, err)
550+
})
513551
}
514552

515553
func Test_ScriptExecution(t *testing.T) {

e2eTest/contract_deployments_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,113 @@ func TestContractTitleParsing(t *testing.T) {
116116
require.Equal(t, "HelloWorld", respA.CreateContractDeployment.Title)
117117
}
118118

119+
func TestImportSyntax(t *testing.T) {
120+
t.Run("new import syntax", func(t *testing.T) {
121+
c := newClient()
122+
project := createProject(t, c)
123+
124+
const contractA = `
125+
pub contract HelloWorld {
126+
pub var A: Int
127+
pub init(a: Int) { self.A = a }
128+
}`
129+
130+
args := []string{
131+
`{"type":"Int","value":"42"}`,
132+
}
133+
134+
const contractB = `
135+
import "HelloWorld"
136+
pub contract Test {
137+
pub var B: Int
138+
pub init() { self.B = HelloWorld.A }
139+
}`
140+
141+
var resp CreateContractDeploymentResponse
142+
err := c.Post(
143+
MutationCreateContractDeployment,
144+
&resp,
145+
client.Var("projectId", project.ID),
146+
client.Var("script", contractA),
147+
client.Var("address", addr1),
148+
client.Var("arguments", args),
149+
client.AddCookie(c.SessionCookie()),
150+
)
151+
assert.NoError(t, err)
152+
153+
err = c.Post(
154+
MutationCreateContractDeployment,
155+
&resp,
156+
client.Var("projectId", project.ID),
157+
client.Var("script", contractB),
158+
client.Var("address", addr1),
159+
client.AddCookie(c.SessionCookie()),
160+
)
161+
assert.NoError(t, err)
162+
})
163+
164+
t.Run("multiple deployments with same name", func(t *testing.T) {
165+
c := newClient()
166+
project := createProject(t, c)
167+
168+
const contractA = `
169+
pub contract HelloWorld {
170+
pub var A: Int
171+
pub init() { self.A = 5 }
172+
}`
173+
174+
const contractB = `
175+
import "HelloWorld"
176+
pub contract Test {
177+
pub var B: Int
178+
pub init() { self.B = HelloWorld.A }
179+
}`
180+
181+
var resp CreateContractDeploymentResponse
182+
err := c.Post(
183+
MutationCreateContractDeployment,
184+
&resp,
185+
client.Var("projectId", project.ID),
186+
client.Var("script", contractA),
187+
client.Var("address", addr1),
188+
client.AddCookie(c.SessionCookie()),
189+
)
190+
assert.NoError(t, err)
191+
192+
err = c.Post(
193+
MutationCreateContractDeployment,
194+
&resp,
195+
client.Var("projectId", project.ID),
196+
client.Var("script", contractA),
197+
client.Var("address", addr2),
198+
client.AddCookie(c.SessionCookie()),
199+
)
200+
assert.NoError(t, err)
201+
202+
// TODO: What if we deploy a different contract with the same name?!?
203+
204+
err = c.Post(
205+
MutationCreateContractDeployment,
206+
&resp,
207+
client.Var("projectId", project.ID),
208+
client.Var("script", contractA),
209+
client.Var("address", addr3),
210+
client.AddCookie(c.SessionCookie()),
211+
)
212+
assert.NoError(t, err)
213+
214+
err = c.Post(
215+
MutationCreateContractDeployment,
216+
&resp,
217+
client.Var("projectId", project.ID),
218+
client.Var("script", contractB),
219+
client.Var("address", addr1),
220+
client.AddCookie(c.SessionCookie()),
221+
)
222+
assert.NoError(t, err)
223+
})
224+
}
225+
119226
func TestContractRedeployment(t *testing.T) {
120227
t.Run("same contract name with different arguments", func(t *testing.T) {
121228
c := newClient()

e2eTest/project_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package e2eTest
2020

2121
import (
22-
"fmt"
2322
"github.com/dapperlabs/flow-playground-api/e2eTest/client"
2423
"github.com/dapperlabs/flow-playground-api/model"
2524
"github.com/google/uuid"
@@ -567,6 +566,12 @@ func TestExportFlowJson(t *testing.T) {
567566
"emulator": "ee82856bf20e2aa6"
568567
}
569568
},
569+
"MetadataViews": {
570+
"source": "",
571+
"aliases": {
572+
"emulator": "f8d6e0586b0a20c7"
573+
}
574+
},
570575
"NonFungibleToken": {
571576
"source": "",
572577
"aliases": {
@@ -586,7 +591,6 @@ func TestExportFlowJson(t *testing.T) {
586591
"testnet": "access.devnet.nodes.onflow.org:9000"
587592
}`
588593

589-
fmt.Println(flowJsonResp.FlowJson)
590594
require.Contains(t, flowJsonResp.FlowJson, CoreContracts)
591595
require.Contains(t, flowJsonResp.FlowJson, Networks)
592596
require.Contains(t, flowJsonResp.FlowJson, "Person")

resolver.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package playground
2020

2121
import (
2222
"context"
23-
"fmt"
2423
"github.com/Masterminds/semver"
2524
"github.com/dapperlabs/flow-playground-api/adapter"
2625
"github.com/dapperlabs/flow-playground-api/auth"
@@ -209,7 +208,6 @@ func (r *mutationResolver) CreateTransactionExecution(
209208
ctx context.Context,
210209
input model.NewTransactionExecution,
211210
) (*model.TransactionExecution, error) {
212-
fmt.Println("CreateTransactionExecution()")
213211
err := r.authorize(ctx, input.ProjectID)
214212
if err != nil {
215213
return nil, err
@@ -220,8 +218,6 @@ func (r *mutationResolver) CreateTransactionExecution(
220218
return nil, err
221219
}
222220

223-
fmt.Println("TX: ", exe.Logs)
224-
225221
return adapter.TransactionToAPI(exe), nil
226222
}
227223

0 commit comments

Comments
 (0)