protected void AddToken(string tokenName, TokenFunction function)
 {
     tokens.Add(new NoArgsToken
     {
         tokenName = tokenName,
         function = function
     });
 }
 protected void AddToken(string tokenName, TokenFunction<string> function)
 {
     tokens.Add(new StringArgToken
     {
         tokenName = tokenName,
         function = function
     });
 }
 protected void AddToken(string tokenName, TokenFunction <string, string> function)
 {
     tokens.Add(new TwoStringArgToken
     {
         tokenName = tokenName,
         function  = function
     });
 }
 protected void AddToken(string tokenName, TokenFunction <int> function)
 {
     tokens.Add(new IntArgToken
     {
         tokenName = tokenName,
         function  = function
     });
 }
 protected void AddToken(string tokenName, TokenFunction function)
 {
     tokens.Add(new NoArgsToken
     {
         tokenName = tokenName,
         function  = function
     });
 }
 protected void AddToken(string tokenName, TokenFunction <string> function)
 {
     _tokens.Add(new StringArgToken
     {
         TokenName = tokenName,
         Function  = function
     });
 }
 public Task <string> TokenQueryAsync(TokenFunction tokenFunction, BlockParameter blockParameter = null)
 {
     return(ContractHandler.QueryAsync <TokenFunction, string>(tokenFunction, blockParameter));
 }