Skip to content

minisomething/minidity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

minidity

A tiny script compiler & vm.
See also: minichain

Overview

compiler

var src = @"
    class foo {
        public globalVar;

        def _ctor() {
            globalVar = 1234;
        }
        def sum (a, b) {
            ret a + b;
        }
    }";

var program = MinidityCompiler.Compile(src);

vm

var vm = new VM<MemStateProvider>();
var gasLimit = 1000;
var gasUsed = 0;

var ret = vm.Execute(program.instructions, gasLimit, out gasUsed);

Console.WriteLine(ret);
Console.WriteLine(
    vm.stateProvider.GetState(
        ABISignature.Field("foo","global")));

Integrate with blockchain

STSTATE and LDSTATE instructions require StateProvider.

public interface IStateProvider
{
    int blockNo { get; }

    object GetState(string key);
    void SetState(string key, object value);
}
public class MinichainStateProvider : IStateProvider
{
    /* .... */
}

Syntax

class CONTRACT_NAME {
    /* FIELDS */
    public name;

    // Constructor
    def _ctor() {
        name = "MY_FIRST_MINIDITY_CONTRACT";
    }

    def sum(a, b) {
        ret a + b;
    }
}

KeySpecs * Dynamic variables * Class-based

Caller and Callee

def sum(a, b, c) {
    ret a + b + c;
}

sum (1, 2, 3);
:caller
push 1
push 2
push 3
call sum(a, b, c)

:sum(a, b, c)
stloc c
stloc b
stloc a
/* ... */
ret

Add internal calls

TODOTODOTODO

private void BuildInternalCalltable()
{
    callTable["Math.pow"] = -1;
}
private void PerformInternalCall(string signature)
{
    if (signature == "Math.pow")
    {
        var a = ctx.state.PopDouble();
        var b = ctx.state.PopDouble();

        ctx.state.Push(MMath.Pow(b, a));
    }
}

About

A tiny script compiler & vm.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages