Install a new smart contract
(code string, args []rpc.Argument)
| 2792 | |
| 2793 | // Install a new smart contract |
| 2794 | func 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 { |
no test coverage detected