MCPcopy Create free account
hub / github.com/DEROFDN/Engram / installSC

Function installSC

functions.go:2794–2862  ·  view source on GitHub ↗

Install a new smart contract

(code string, args []rpc.Argument)

Source from the content-addressed store, hash-verified

2792
2793// Install a new smart contract
2794func installSC(code string, args []rpc.Argument) (txid string, err error) {
2795 var dest string
2796 switch session.Network {
2797 case NETWORK_MAINNET:
2798 dest = "dero1qykyta6ntpd27nl0yq4xtzaf4ls6p5e9pqu0k2x4x3pqq5xavjsdxqgny8270"
2799 case NETWORK_SIMULATOR:
2800 dest = "deto1qyvyeyzrcm2fzf6kyq7egkes2ufgny5xn77y6typhfx9s7w3mvyd5qqynr5hx"
2801 case NETWORK_TESTNET:
2802 dest = "deto1qy0ehnqjpr0wxqnknyc66du2fsxyktppkr8m8e6jvplp954klfjz2qqdzcd8p"
2803 }
2804
2805 transfer := rpc.Transfer{
2806 Destination: dest,
2807 Amount: 0,
2808 Burn: 0,
2809 }
2810
2811 _, err = transfer.Payload_RPC.CheckPack(transaction.PAYLOAD0_LIMIT)
2812 if err != nil {
2813 logger.Errorf("[Engram] Install arguments packing err: %s\n", err)
2814 err = fmt.Errorf("contract install pack error")
2815 return
2816 }
2817
2818 // decode SC from base64 if possible
2819 if sc, err := base64.StdEncoding.DecodeString(code); err == nil {
2820 code = string(sc)
2821 }
2822
2823 args = append(args, rpc.Argument{Name: rpc.SCACTION, DataType: rpc.DataUint64, Value: uint64(rpc.SC_INSTALL)})
2824 args = append(args, rpc.Argument{Name: rpc.SCCODE, DataType: rpc.DataString, Value: code})
2825
2826 fees := uint64(0)
2827 gasParams := rpc.GasEstimate_Params{
2828 Transfers: []rpc.Transfer{transfer},
2829 SC_Code: code,
2830 SC_Value: 0,
2831 SC_RPC: args,
2832 Ringsize: 2,
2833 Signer: engram.Disk.GetAddress().String(),
2834 }
2835
2836 if gas, err := getGasEstimate(gasParams); err == nil {
2837 fees = gas
2838 logger.Printf("[Engram] SC install fees: %d\n", fees)
2839 } else {
2840 // uses default fees
2841 logger.Errorf("[Engram] Error estimating fees: %s\n", err)
2842 }
2843
2844 tx, err := engram.Disk.TransferPayload0([]rpc.Transfer{transfer}, 2, false, args, fees, false)
2845 if err != nil {
2846 logger.Errorf("[Engram] Error while building install transaction: %s\n", err)
2847 err = fmt.Errorf("contract install build error")
2848 return
2849 }
2850
2851 if err = engram.Disk.SendTransaction(tx); err != nil {

Callers 1

layoutContractEditorFunction · 0.85

Calls 1

getGasEstimateFunction · 0.85

Tested by

no test coverage detected