github.com/n1ghtfa1l/go-vnt@v0.6.4-alpha.6/core/wavm/func_table.go (about)

     1  // Copyright 2019 The go-vnt Authors
     2  // This file is part of the go-vnt library.
     3  //
     4  // The go-vnt library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-vnt library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-vnt library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package wavm
    18  
    19  import (
    20  	"reflect"
    21  
    22  	"github.com/vntchain/vnt-wasm/wasm"
    23  )
    24  
    25  const (
    26  	OpNameGetBalanceFromAddress = "GetBalanceFromAddress"
    27  	OpNameGetBlockNumber        = "GetBlockNumber"
    28  	OpNameGetGas                = "GetGas"
    29  	OpNameGetBlockHash          = "GetBlockHash"
    30  	OpNameGetBlockProduser      = "GetBlockProduser"
    31  	OpNameGetTimestamp          = "GetTimestamp"
    32  	OpNameGetOrigin             = "GetOrigin"
    33  	OpNameGetSender             = "GetSender"
    34  	OpNameGetGasLimit           = "GetGasLimit"
    35  	OpNameGetValue              = "GetValue"
    36  	OpNameSHA3                  = "SHA3"
    37  	OpNameEcrecover             = "Ecrecover"
    38  	OpNameGetContractAddress    = "GetContractAddress"
    39  	OpNameAssert                = "Assert"
    40  
    41  	OpNameEvent = "Event"
    42  
    43  	OpNamePrintAddress  = "PrintAddress"
    44  	OpNamePrintStr      = "PrintStr"
    45  	OpNamePrintQStr     = "PrintQStr"
    46  	OpNamePrintUint64T  = "PrintUint64T"
    47  	OpNamePrintUint32T  = "PrintUint32T"
    48  	OpNamePrintInt64T   = "PrintInt64T"
    49  	OpNamePrintInt32T   = "PrintInt32T"
    50  	OpNamePrintUint256T = "PrintUint256T"
    51  
    52  	OpNameFromI64 = "FromI64"
    53  	OpNameFromU64 = "FromU64"
    54  	OpNameToI64   = "ToI64"
    55  	OpNameToU64   = "ToU64"
    56  	OpNameConcat  = "Concat"
    57  	OpNameEqual   = "Equal"
    58  
    59  	OpNameSendFromContract     = "SendFromContract"
    60  	OpNameTransferFromContract = "TransferFromContract"
    61  
    62  	OpNameContractCall = "ContractCall"
    63  
    64  	//将字符串转化为地址
    65  	OpNameAddressFrom     = "AddressFrom"
    66  	OpNameAddressToString = "AddressToString"
    67  	OpNameU256From        = "U256From"
    68  	OpNameU256ToString    = "U256ToString"
    69  
    70  	OpNameAddKeyInfo          = "AddKeyInfo"
    71  	OpNameWriteWithPointer    = "WriteWithPointer"
    72  	OpNameReadWithPointer     = "ReadWithPointer"
    73  	OpNameInitializeVariables = "InitializeVariables"
    74  
    75  	//uint256
    76  	OpNameU256FromU64 = "U256FromU64"
    77  	OpNameU256FromI64 = "U256FromI64"
    78  	OpNameU256Add     = "U256_Add"
    79  	OpNameU256Sub     = "U256_Sub"
    80  	OpNameU256Mul     = "U256_Mul"
    81  	OpNameU256Div     = "U256_Div"
    82  	OpNameU256Mod     = "U256_Mod"
    83  	OpNameU256Pow     = "U256_Pow"
    84  	OpNameU256Cmp     = "U256_Cmp"
    85  	OpNameU256Shl     = "U256_Shl"
    86  	OpNameU256Shr     = "U256_Shr"
    87  	OpNameU256And     = "U256_And"
    88  	OpNameU256Or      = "U256_Or"
    89  	OpNameU256Xor     = "U256_Xor"
    90  
    91  	//math
    92  	OpNamePow = "Pow"
    93  
    94  	//add gas
    95  	OpNameAddGas = "AddGas"
    96  
    97  	OpNameRevert = "Revert"
    98  
    99  	//qlang
   100  	OpNameSender = "Sender"
   101  	OpNameLoad   = "Load"
   102  	OpNameStore  = "Store"
   103  )
   104  
   105  func (ef *EnvFunctions) getFuncTable() map[string]wasm.Function {
   106  	// 如果 vntlib.h里的参数变化,这里的方法签名也需要跟着变化,否则wasm validate不会通过
   107  	var func_table = map[string]wasm.Function{
   108  		OpNameGetBalanceFromAddress: {
   109  			Host: reflect.ValueOf(ef.GetBalanceFromAddress),
   110  			Sig: &wasm.FunctionSig{
   111  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   112  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   113  			},
   114  			Body: &wasm.FunctionBody{
   115  				Code: []byte{},
   116  			},
   117  		},
   118  		OpNameGetGas: {
   119  			Host: reflect.ValueOf(ef.GetGas),
   120  			Sig: &wasm.FunctionSig{
   121  				ParamTypes:  []wasm.ValueType{},
   122  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI64},
   123  			},
   124  			Body: &wasm.FunctionBody{
   125  				Code: []byte{},
   126  			},
   127  		},
   128  		OpNameGetBlockHash: {
   129  			Host: reflect.ValueOf(ef.GetBlockHash),
   130  			Sig: &wasm.FunctionSig{
   131  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64},
   132  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   133  			},
   134  			Body: &wasm.FunctionBody{
   135  				Code: []byte{},
   136  			},
   137  		},
   138  		OpNameGetBlockProduser: {
   139  			Host: reflect.ValueOf(ef.GetBlockProduser),
   140  			Sig: &wasm.FunctionSig{
   141  				ParamTypes:  []wasm.ValueType{},
   142  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   143  			},
   144  			Body: &wasm.FunctionBody{
   145  				Code: []byte{},
   146  			},
   147  		},
   148  		OpNameGetTimestamp: {
   149  			Host: reflect.ValueOf(ef.GetTimestamp),
   150  			Sig: &wasm.FunctionSig{
   151  				ParamTypes:  []wasm.ValueType{},
   152  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI64},
   153  			},
   154  			Body: &wasm.FunctionBody{
   155  				Code: []byte{},
   156  			},
   157  		},
   158  		OpNameGetOrigin: {
   159  			Host: reflect.ValueOf(ef.GetOrigin),
   160  			Sig: &wasm.FunctionSig{
   161  				ParamTypes:  []wasm.ValueType{},
   162  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   163  			},
   164  			Body: &wasm.FunctionBody{
   165  				Code: []byte{},
   166  			},
   167  		},
   168  		OpNameGetSender: {
   169  			Host: reflect.ValueOf(ef.GetSender),
   170  			Sig: &wasm.FunctionSig{
   171  				ParamTypes:  []wasm.ValueType{},
   172  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   173  			},
   174  			Body: &wasm.FunctionBody{
   175  				Code: []byte{},
   176  			},
   177  		},
   178  		OpNameGetGasLimit: {
   179  			Host: reflect.ValueOf(ef.GetGasLimit),
   180  			Sig: &wasm.FunctionSig{
   181  				ParamTypes:  []wasm.ValueType{},
   182  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI64},
   183  			},
   184  			Body: &wasm.FunctionBody{
   185  				Code: []byte{},
   186  			},
   187  		},
   188  		OpNameGetValue: {
   189  			Host: reflect.ValueOf(ef.GetValue),
   190  			Sig: &wasm.FunctionSig{
   191  				ParamTypes:  []wasm.ValueType{},
   192  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   193  			},
   194  			Body: &wasm.FunctionBody{
   195  				Code: []byte{},
   196  			},
   197  		},
   198  		OpNameGetBlockNumber: {
   199  			Host: reflect.ValueOf(ef.GetBlockNumber),
   200  			Sig: &wasm.FunctionSig{
   201  				ParamTypes:  []wasm.ValueType{},
   202  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI64},
   203  			},
   204  			Body: &wasm.FunctionBody{
   205  				Code: []byte{},
   206  			},
   207  		},
   208  		OpNameSHA3: {
   209  			Host: reflect.ValueOf(ef.SHA3),
   210  			Sig: &wasm.FunctionSig{
   211  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   212  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   213  			},
   214  			Body: &wasm.FunctionBody{
   215  				Code: []byte{},
   216  			},
   217  		},
   218  		OpNameEcrecover: {
   219  			Host: reflect.ValueOf(ef.Ecrecover),
   220  			Sig: &wasm.FunctionSig{
   221  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32, wasm.ValueTypeI32, wasm.ValueTypeI32},
   222  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   223  			},
   224  			Body: &wasm.FunctionBody{
   225  				Code: []byte{},
   226  			},
   227  		},
   228  		OpNameGetContractAddress: {
   229  			Host: reflect.ValueOf(ef.GetContractAddress),
   230  			Sig: &wasm.FunctionSig{
   231  				ParamTypes:  []wasm.ValueType{},
   232  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   233  			},
   234  			Body: &wasm.FunctionBody{
   235  				Code: []byte{},
   236  			},
   237  		},
   238  		OpNameAssert: {
   239  			Host: reflect.ValueOf(ef.Assert),
   240  			Sig: &wasm.FunctionSig{
   241  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   242  				ReturnTypes: []wasm.ValueType{},
   243  			},
   244  			Body: &wasm.FunctionBody{
   245  				Code: []byte{},
   246  			},
   247  		},
   248  		OpNameSendFromContract: {
   249  			Host: reflect.ValueOf(ef.SendFromContract),
   250  			Sig: &wasm.FunctionSig{
   251  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   252  				ReturnTypes: []wasm.ValueType{},
   253  			},
   254  			Body: &wasm.FunctionBody{
   255  				Code: []byte{},
   256  			},
   257  		},
   258  		OpNameTransferFromContract: {
   259  			Host: reflect.ValueOf(ef.TransferFromContract),
   260  			Sig: &wasm.FunctionSig{
   261  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   262  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   263  			},
   264  			Body: &wasm.FunctionBody{
   265  				Code: []byte{},
   266  			},
   267  		},
   268  		OpNameEvent: {
   269  			Sig: &wasm.FunctionSig{
   270  				ParamTypes:  []wasm.ValueType{},
   271  				ReturnTypes: []wasm.ValueType{},
   272  			},
   273  			Body: &wasm.FunctionBody{
   274  				Code: []byte{},
   275  			},
   276  		},
   277  		OpNamePrintAddress: {
   278  			Host: reflect.ValueOf(ef.PrintAddress),
   279  			Sig: &wasm.FunctionSig{
   280  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   281  				ReturnTypes: []wasm.ValueType{},
   282  			},
   283  			Body: &wasm.FunctionBody{
   284  				Code: []byte{},
   285  			},
   286  		},
   287  		OpNamePrintStr: {
   288  			Host: reflect.ValueOf(ef.PrintStr),
   289  			Sig: &wasm.FunctionSig{
   290  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   291  				ReturnTypes: []wasm.ValueType{},
   292  			},
   293  			Body: &wasm.FunctionBody{
   294  				Code: []byte{},
   295  			},
   296  		},
   297  		OpNamePrintQStr: {
   298  			Host: reflect.ValueOf(ef.PrintQStr),
   299  			Sig: &wasm.FunctionSig{
   300  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   301  				ReturnTypes: []wasm.ValueType{},
   302  			},
   303  			Body: &wasm.FunctionBody{
   304  				Code: []byte{},
   305  			},
   306  		},
   307  		OpNamePrintUint64T: {
   308  			Host: reflect.ValueOf(ef.PrintUint64T),
   309  			Sig: &wasm.FunctionSig{
   310  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI64},
   311  				ReturnTypes: []wasm.ValueType{},
   312  			},
   313  			Body: &wasm.FunctionBody{
   314  				Code: []byte{},
   315  			},
   316  		},
   317  		OpNamePrintUint32T: {
   318  			Host: reflect.ValueOf(ef.PrintUint32T),
   319  			Sig: &wasm.FunctionSig{
   320  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   321  				ReturnTypes: []wasm.ValueType{},
   322  			},
   323  			Body: &wasm.FunctionBody{
   324  				Code: []byte{},
   325  			},
   326  		},
   327  		OpNamePrintInt64T: {
   328  			Host: reflect.ValueOf(ef.PrintInt64T),
   329  			Sig: &wasm.FunctionSig{
   330  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI64},
   331  				ReturnTypes: []wasm.ValueType{},
   332  			},
   333  			Body: &wasm.FunctionBody{
   334  				Code: []byte{},
   335  			},
   336  		},
   337  		OpNamePrintInt32T: {
   338  			Host: reflect.ValueOf(ef.PrintInt32T),
   339  			Sig: &wasm.FunctionSig{
   340  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   341  				ReturnTypes: []wasm.ValueType{},
   342  			},
   343  			Body: &wasm.FunctionBody{
   344  				Code: []byte{},
   345  			},
   346  		},
   347  		OpNamePrintUint256T: {
   348  			Host: reflect.ValueOf(ef.PrintUint256T),
   349  			Sig: &wasm.FunctionSig{
   350  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   351  				ReturnTypes: []wasm.ValueType{},
   352  			},
   353  			Body: &wasm.FunctionBody{
   354  				Code: []byte{},
   355  			},
   356  		},
   357  		OpNameFromI64: {
   358  			Host: reflect.ValueOf(ef.fromI64),
   359  			Sig: &wasm.FunctionSig{
   360  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64},
   361  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   362  			},
   363  			Body: &wasm.FunctionBody{
   364  				Code: []byte{},
   365  			},
   366  		},
   367  		OpNameFromU64: {
   368  			Host: reflect.ValueOf(ef.fromU64),
   369  			Sig: &wasm.FunctionSig{
   370  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64},
   371  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   372  			},
   373  			Body: &wasm.FunctionBody{
   374  				Code: []byte{},
   375  			},
   376  		},
   377  		OpNameToI64: {
   378  			Host: reflect.ValueOf(ef.toI64),
   379  			Sig: &wasm.FunctionSig{
   380  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   381  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI64},
   382  			},
   383  			Body: &wasm.FunctionBody{
   384  				Code: []byte{},
   385  			},
   386  		},
   387  		OpNameToU64: {
   388  			Host: reflect.ValueOf(ef.toU64),
   389  			Sig: &wasm.FunctionSig{
   390  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   391  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI64},
   392  			},
   393  			Body: &wasm.FunctionBody{
   394  				Code: []byte{},
   395  			},
   396  		},
   397  		OpNameConcat: {
   398  			Host: reflect.ValueOf(ef.Concat),
   399  			Sig: &wasm.FunctionSig{
   400  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   401  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   402  			},
   403  			Body: &wasm.FunctionBody{
   404  				Code: []byte{},
   405  			},
   406  		},
   407  		OpNameEqual: {
   408  			Host: reflect.ValueOf(ef.Equal),
   409  			Sig: &wasm.FunctionSig{
   410  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   411  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   412  			},
   413  			Body: &wasm.FunctionBody{
   414  				Code: []byte{},
   415  			},
   416  		},
   417  		OpNameContractCall: {
   418  			Sig: &wasm.FunctionSig{
   419  				ParamTypes:  []wasm.ValueType{},
   420  				ReturnTypes: []wasm.ValueType{},
   421  			},
   422  			Body: &wasm.FunctionBody{
   423  				Code: []byte{},
   424  			},
   425  		},
   426  		OpNameAddressFrom: {
   427  			Host: reflect.ValueOf(ef.AddressFrom),
   428  			Sig: &wasm.FunctionSig{
   429  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   430  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   431  			},
   432  			Body: &wasm.FunctionBody{
   433  				Code: []byte{},
   434  			},
   435  		},
   436  		OpNameAddressToString: {
   437  			Host: reflect.ValueOf(ef.AddressToString),
   438  			Sig: &wasm.FunctionSig{
   439  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   440  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   441  			},
   442  			Body: &wasm.FunctionBody{
   443  				Code: []byte{},
   444  			},
   445  		},
   446  		OpNameU256From: {
   447  			Host: reflect.ValueOf(ef.U256From),
   448  			Sig: &wasm.FunctionSig{
   449  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   450  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   451  			},
   452  			Body: &wasm.FunctionBody{
   453  				Code: []byte{},
   454  			},
   455  		},
   456  		OpNameU256ToString: {
   457  			Host: reflect.ValueOf(ef.U256ToString),
   458  			Sig: &wasm.FunctionSig{
   459  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   460  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   461  			},
   462  			Body: &wasm.FunctionBody{
   463  				Code: []byte{},
   464  			},
   465  		},
   466  		OpNameU256FromU64: {
   467  			Host: reflect.ValueOf(ef.U256FromU64),
   468  			Sig: &wasm.FunctionSig{
   469  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64},
   470  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   471  			},
   472  			Body: &wasm.FunctionBody{
   473  				Code: []byte{},
   474  			},
   475  		},
   476  		OpNameU256FromI64: {
   477  			Host: reflect.ValueOf(ef.U256FromI64),
   478  			Sig: &wasm.FunctionSig{
   479  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64},
   480  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   481  			},
   482  			Body: &wasm.FunctionBody{
   483  				Code: []byte{},
   484  			},
   485  		},
   486  		OpNameAddKeyInfo: {
   487  			Host: reflect.ValueOf(ef.AddKeyInfo),
   488  			Sig: &wasm.FunctionSig{
   489  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64, wasm.ValueTypeI32, wasm.ValueTypeI64, wasm.ValueTypeI32, wasm.ValueTypeI32},
   490  				ReturnTypes: []wasm.ValueType{},
   491  			},
   492  			Body: &wasm.FunctionBody{
   493  				Code: []byte{},
   494  			},
   495  		},
   496  		OpNameWriteWithPointer: {
   497  			Host: reflect.ValueOf(ef.WriteWithPointer),
   498  			Sig: &wasm.FunctionSig{
   499  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64, wasm.ValueTypeI64},
   500  				ReturnTypes: []wasm.ValueType{},
   501  			},
   502  			Body: &wasm.FunctionBody{
   503  				Code: []byte{},
   504  			},
   505  		},
   506  		OpNameReadWithPointer: {
   507  			Host: reflect.ValueOf(ef.ReadWithPointer),
   508  			Sig: &wasm.FunctionSig{
   509  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64, wasm.ValueTypeI64},
   510  				ReturnTypes: []wasm.ValueType{},
   511  			},
   512  			Body: &wasm.FunctionBody{
   513  				Code: []byte{},
   514  			},
   515  		},
   516  		OpNameInitializeVariables: {
   517  			Host: reflect.ValueOf(ef.InitializeVariables),
   518  			Sig: &wasm.FunctionSig{
   519  				ParamTypes:  []wasm.ValueType{},
   520  				ReturnTypes: []wasm.ValueType{},
   521  			},
   522  			Body: &wasm.FunctionBody{
   523  				Code: []byte{},
   524  			},
   525  		},
   526  		OpNameU256Add: {
   527  			Host: reflect.ValueOf(ef.U256Add),
   528  			Sig: &wasm.FunctionSig{
   529  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   530  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   531  			},
   532  			Body: &wasm.FunctionBody{
   533  				Code: []byte{},
   534  			},
   535  		},
   536  		OpNameU256Sub: {
   537  			Host: reflect.ValueOf(ef.U256Sub),
   538  			Sig: &wasm.FunctionSig{
   539  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   540  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   541  			},
   542  			Body: &wasm.FunctionBody{
   543  				Code: []byte{},
   544  			},
   545  		},
   546  		OpNameU256Mul: {
   547  			Host: reflect.ValueOf(ef.U256Mul),
   548  			Sig: &wasm.FunctionSig{
   549  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   550  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   551  			},
   552  			Body: &wasm.FunctionBody{
   553  				Code: []byte{},
   554  			},
   555  		},
   556  		OpNameU256Div: {
   557  			Host: reflect.ValueOf(ef.U256Div),
   558  			Sig: &wasm.FunctionSig{
   559  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   560  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   561  			},
   562  			Body: &wasm.FunctionBody{
   563  				Code: []byte{},
   564  			},
   565  		},
   566  		OpNameU256Mod: {
   567  			Host: reflect.ValueOf(ef.U256Mod),
   568  			Sig: &wasm.FunctionSig{
   569  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   570  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   571  			},
   572  			Body: &wasm.FunctionBody{
   573  				Code: []byte{},
   574  			},
   575  		},
   576  		OpNameU256Pow: {
   577  			Host: reflect.ValueOf(ef.U256Pow),
   578  			Sig: &wasm.FunctionSig{
   579  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   580  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   581  			},
   582  			Body: &wasm.FunctionBody{
   583  				Code: []byte{},
   584  			},
   585  		},
   586  		OpNameU256Cmp: {
   587  			Host: reflect.ValueOf(ef.U256Cmp),
   588  			Sig: &wasm.FunctionSig{
   589  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   590  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   591  			},
   592  			Body: &wasm.FunctionBody{
   593  				Code: []byte{},
   594  			},
   595  		},
   596  		OpNameU256Shl: {
   597  			Host: reflect.ValueOf(ef.U256Shl),
   598  			Sig: &wasm.FunctionSig{
   599  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   600  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   601  			},
   602  			Body: &wasm.FunctionBody{
   603  				Code: []byte{},
   604  			},
   605  		},
   606  		OpNameU256Shr: {
   607  			Host: reflect.ValueOf(ef.U256Shr),
   608  			Sig: &wasm.FunctionSig{
   609  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   610  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   611  			},
   612  			Body: &wasm.FunctionBody{
   613  				Code: []byte{},
   614  			},
   615  		},
   616  		OpNameU256And: {
   617  			Host: reflect.ValueOf(ef.U256And),
   618  			Sig: &wasm.FunctionSig{
   619  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   620  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   621  			},
   622  			Body: &wasm.FunctionBody{
   623  				Code: []byte{},
   624  			},
   625  		},
   626  		OpNameU256Xor: {
   627  			Host: reflect.ValueOf(ef.U256Xor),
   628  			Sig: &wasm.FunctionSig{
   629  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   630  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   631  			},
   632  			Body: &wasm.FunctionBody{
   633  				Code: []byte{},
   634  			},
   635  		},
   636  		OpNameU256Or: {
   637  			Host: reflect.ValueOf(ef.U256Or),
   638  			Sig: &wasm.FunctionSig{
   639  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   640  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   641  			},
   642  			Body: &wasm.FunctionBody{
   643  				Code: []byte{},
   644  			},
   645  		},
   646  		OpNamePow: {
   647  			Host: reflect.ValueOf(ef.Pow),
   648  			Sig: &wasm.FunctionSig{
   649  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64, wasm.ValueTypeI64},
   650  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI64},
   651  			},
   652  			Body: &wasm.FunctionBody{
   653  				Code: []byte{},
   654  			},
   655  		},
   656  		OpNameAddGas: {
   657  			Host: reflect.ValueOf(ef.AddGas),
   658  			Sig: &wasm.FunctionSig{
   659  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI64},
   660  				ReturnTypes: []wasm.ValueType{},
   661  			},
   662  			Body: &wasm.FunctionBody{
   663  				Code: []byte{},
   664  			},
   665  		},
   666  		OpNameRevert: {
   667  			Host: reflect.ValueOf(ef.Revert),
   668  			Sig: &wasm.FunctionSig{
   669  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   670  				ReturnTypes: []wasm.ValueType{},
   671  			},
   672  			Body: &wasm.FunctionBody{
   673  				Code: []byte{},
   674  			},
   675  		},
   676  		OpNameSender: {
   677  			Host: reflect.ValueOf(ef.Sender),
   678  			Sig: &wasm.FunctionSig{
   679  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32},
   680  				ReturnTypes: []wasm.ValueType{},
   681  			},
   682  			Body: &wasm.FunctionBody{
   683  				Code: []byte{},
   684  			},
   685  		},
   686  		OpNameLoad: {
   687  			Host: reflect.ValueOf(ef.Load),
   688  			Sig: &wasm.FunctionSig{
   689  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   690  				ReturnTypes: []wasm.ValueType{wasm.ValueTypeI32},
   691  			},
   692  			Body: &wasm.FunctionBody{
   693  				Code: []byte{},
   694  			},
   695  		},
   696  		OpNameStore: {
   697  			Host: reflect.ValueOf(ef.Store),
   698  			Sig: &wasm.FunctionSig{
   699  				ParamTypes:  []wasm.ValueType{wasm.ValueTypeI32, wasm.ValueTypeI32},
   700  				ReturnTypes: []wasm.ValueType{},
   701  			},
   702  			Body: &wasm.FunctionBody{
   703  				Code: []byte{},
   704  			},
   705  		},
   706  	}
   707  	return func_table
   708  }
   709  
   710  //
   711  //func ResolveHostFunc() map[FieldName]*Function {
   712  //	for k, v := range resolveHostFunc {
   713  //		v.IsHost = true
   714  //		v.FieldName = k
   715  //		resolveHostFunc[k] = v
   716  //	}
   717  //	return resolveHostFunc
   718  //}