dero_dvm_basic 0.1.3 copy "dero_dvm_basic: ^0.1.3" to clipboard
dero_dvm_basic: ^0.1.3 copied to clipboard

DVM-BASIC parser to convert a Dero smart contract into a data structure.

DVM-BASIC parser in Dart for Dero smart contracts.

Features #

  • DVM-BASIC SC parser/lexer

Usage #

Below, the way to load a bas file containing a smart contract, And to perform the syntactic analysis.

It is then possible, for example, to pretty print all function signatures.

import 'dart:io';

import 'package:dero_dvm_basic/dero_dvm_basic.dart';
import 'package:path/path.dart' as p;

Future<void> main() async {
  var filePath =
  p.join(Directory.current.path, 'smart_contracts', 'token.bas');

  try {
    File file = File(filePath);
    String data = await file.readAsString();
    
    var dBasicRepository = DBasicRepository.loadSmartContract(data);

    dBasicRepository.sc.prettyPrintFunctionSignatures();
    // Console output:
    // Function: Lottery - params : {} - returnType : DvmType.uint64
    // Function: Initialize - params : {} - returnType : DvmType.uint64
    // Function: TuneLotteryParameters - params : {input : DvmType.uint64, lotteryeveryXdeposit : DvmType.uint64, lotterygiveback : DvmType.uint64} - returnType : DvmType.uint64
    // Function: TransferOwnership - params : {newowner : DvmType.string} - returnType : DvmType.uint64
    // Function: ClaimOwnership - params : {} - returnType : DvmType.uint64
    // Function: Withdraw - params : {amount : DvmType.uint64} - returnType : DvmType.uint64
    // Function: UpdateCode - params : {code : DvmType.string} - returnType : DvmType.uint64

  } catch (e) {
    print(e);
  }
}

Once the parsing is successful, we can retrieve each function of the SC and browse its numbered execution lines.

var dbasicRepository = DbasicRepository.loadSmartContract(filePath);

DBasicFunction register = dbasicRepository.sc.getFunction('Register');

Map<int, DvmObject> lines = register.lines ?? {};
for (var line in lines.entries) {
  print(
    'Number: ${line.key} | Type: ${line.value.runtimeType} | Code: ${line.value.toDBasicCode()}');
}
// Console output:
// Number: 10 | Type: _$_IfStatement | Code: IF EXISTS(name) THEN GOTO 50
// Number: 20 | Type: _$_IfStatement | Code: IF STRLEN(name) >= 6 THEN GOTO 40
// Number: 30 | Type: _$_IfStatement | Code: IF SIGNER() != address_raw("deto1qyvyeyzrcm2fzf6kyq7egkes2ufgny5xn77y6typhfx9s7w3mvyd5qqynr5hx") THEN GOTO 50
// Number: 40 | Type: _$_FunctionInvocation | Code: STORE(name, SIGNER())
// Number: 50 | Type: _$_ReturnStatement | Code: RETURN 0

And much more (see example) ...

Donations #

If you found this package useful :)

Send any amount to dero1qy5a6wk2r9mq3e5kagku4kdrhq407qhvht8qke5sxpm9u8lqmph3vqgl3nz8t or use my named address Ez3kiel.

Thanks!

2
likes
0
points
62
downloads

Publisher

unverified uploader

Weekly Downloads

DVM-BASIC parser to convert a Dero smart contract into a data structure.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

freezed_annotation, path, petitparser

More

Packages that depend on dero_dvm_basic