aboutsummaryrefslogtreecommitdiffstats
path: root/utils/compile.go
blob: 894fc2d09566dec48fc80df58db87c0d844e02e9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package utils

import (
    "fmt"
    "github.com/ethereum/eth-go/ethutil"
    "github.com/obscuren/mutan"
    "strings"
)

// General compile function
func Compile(script string) ([]byte, error) {
    asm, errors := mutan.Compile(strings.NewReader(script), false)
    if len(errors) > 0 {
        var errs string
        for _, er := range errors {
            if er != nil {
                errs += er.Error()
            }
        }
        return nil, fmt.Errorf("%v", errs)
    }

    return ethutil.Assemble(asm...), nil
}

func CompileScript(script string) ([]byte, []byte, error) {
    // Preprocess
    mainInput, initInput := ethutil.PreProcess(script)
    // Compile main script
    mainScript, err := Compile(mainInput)
    if err != nil {
        return nil, nil, err
    }

    // Compile init script
    initScript, err := Compile(initInput)
    if err != nil {
        return nil, nil, err
    }

    return mainScript, initScript, nil
}