github.com/mavryk-network/mvgo@v1.19.9/internal/compose/alpha/clone.go (about) 1 // Copyright (c) 2023 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc, abdul@blockwatch.cc 3 4 package alpha 5 6 import ( 7 "bytes" 8 9 "github.com/mavryk-network/mvgo/internal/compose" 10 "gopkg.in/yaml.v3" 11 ) 12 13 func (e *Engine) Clone(ctx compose.Context, ops []compose.Op, cfg compose.CloneConfig) ([]byte, error) { 14 spec := Spec{ 15 Version: VERSION, 16 Pipelines: []Pipeline{{ 17 Name: cfg.Name, 18 Tasks: make([]Task, 0, len(ops)), 19 }}, 20 } 21 22 for _, op := range ops { 23 switch op.Type { 24 case "origination": 25 s := &Script{ 26 Code: &Code{}, 27 Storage: &Storage{ 28 Args: op.Args, 29 }, 30 } 31 switch cfg.Mode { 32 case compose.CloneModeFile: 33 s.Code.File = op.Url + "#code" 34 if s.Storage.Args == nil { 35 s.Storage.File = op.Url + "#storage" 36 } 37 case compose.CloneModeJson, compose.CloneModeBinary: 38 s.Code.Value = op.PackedCode 39 if s.Storage.Args == nil { 40 s.Storage.Value = op.PackedStorage 41 } 42 case compose.CloneModeUrl: 43 s.Code.Url = op.Url + "#code" 44 if s.Storage.Args == nil { 45 s.Storage.Url = op.Url + "#storage" 46 } 47 } 48 spec.Pipelines[0].Tasks = append(spec.Pipelines[0].Tasks, Task{ 49 Type: "deploy", 50 Alias: cfg.Name, 51 Source: op.Sender, 52 Amount: uint64(op.Amount * 1_000_000), 53 Script: s, 54 }) 55 case "transaction": 56 typ := "transfer" 57 var p *Params 58 if op.Params != nil { 59 typ = "call" 60 p = &Params{ 61 Entrypoint: op.Params.Entrypoint, 62 Args: op.Args, 63 } 64 if p.Args == nil { 65 switch cfg.Mode { 66 case compose.CloneModeFile: 67 p.File = op.Url 68 case compose.CloneModeJson, compose.CloneModeBinary: 69 p.Value = op.PackedParams 70 case compose.CloneModeUrl: 71 p.Url = op.Url 72 } 73 } 74 } 75 spec.Pipelines[0].Tasks = append(spec.Pipelines[0].Tasks, Task{ 76 Type: typ, 77 Source: op.Sender, 78 Destination: "$" + cfg.Name, 79 Amount: uint64(op.Amount * 1_000_000), 80 Params: p, 81 }) 82 } 83 } 84 85 buf := bytes.NewBuffer(nil) 86 enc := yaml.NewEncoder(buf) 87 enc.SetIndent(2) 88 err := enc.Encode(spec) 89 return buf.Bytes(), err 90 }