mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Add example kybra_like
This commit is contained in:
1 parent
ba8df41269
commit
f3de183607
2 files changed
+117
No files matched your search
@@ -0,0 +1,90 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, Any
|
||||
|
||||
Query = Any
|
||||
Update = Any
|
||||
nat64 = Any
|
||||
|
||||
__all__ = [
|
||||
"initialize_supply",
|
||||
"transfer",
|
||||
"balance",
|
||||
"ticker",
|
||||
"name",
|
||||
"total_supply",
|
||||
]
|
||||
|
||||
|
||||
@dataclass
|
||||
class Account:
|
||||
address: str
|
||||
balance: nat64
|
||||
|
||||
|
||||
@dataclass
|
||||
class State:
|
||||
accounts: Dict[str, Account]
|
||||
total_supply: nat64
|
||||
ticker: str
|
||||
name: str
|
||||
|
||||
|
||||
state = State(
|
||||
accounts={},
|
||||
total_supply=0,
|
||||
ticker="",
|
||||
name="KYBRA",
|
||||
)
|
||||
|
||||
|
||||
def initialize_supply(
|
||||
ticker: str, name: str, total_supply: nat64, original_address: str
|
||||
) -> Update:
|
||||
global state
|
||||
state = State(
|
||||
accounts={
|
||||
original_address: Account(
|
||||
address=original_address,
|
||||
balance=total_supply,
|
||||
)
|
||||
},
|
||||
ticker=ticker,
|
||||
name=name,
|
||||
total_supply=total_supply,
|
||||
)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def transfer(from_: str, to: str, amount: nat64) -> Update:
|
||||
global state
|
||||
if state.accounts[to] is None:
|
||||
state.accounts[to] = Account(address=to, balance=0)
|
||||
|
||||
state.accounts[from_].balance -= amount
|
||||
state.accounts[to].balance += amount
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def balance(address: str) -> Query:
|
||||
account = state.accounts[address]
|
||||
if account is None:
|
||||
return 0
|
||||
return account.balance
|
||||
|
||||
|
||||
def ticker() -> Query:
|
||||
return state.ticker
|
||||
|
||||
|
||||
def name() -> Query:
|
||||
return state.name
|
||||
|
||||
|
||||
def total_supply() -> Query:
|
||||
return state.total_supply
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(name())
|
||||
@@ -0,0 +1,27 @@
|
||||
use rustpython_vm as vm;
|
||||
use vm::builtins::PyStrRef;
|
||||
|
||||
fn main() -> vm::PyResult<()> {
|
||||
let interp = vm::Interpreter::with_init(Default::default(), |vm| {
|
||||
vm.add_native_modules(rustpython_stdlib::get_module_inits());
|
||||
});
|
||||
let result = interp
|
||||
.run_or_else(
|
||||
|vm, exc| {
|
||||
vm.print_exception(exc.clone());
|
||||
Err(exc)
|
||||
},
|
||||
|vm| {
|
||||
vm.insert_sys_path(vm.new_pyobj("examples"))
|
||||
.expect("add path");
|
||||
let module = vm.import("kybra_like", None, 0)?;
|
||||
let name_func = module.get_attr("name", vm)?;
|
||||
let result = vm.invoke(&name_func, ())?;
|
||||
let result: PyStrRef = result.try_into_value(vm)?;
|
||||
Ok(result)
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
println!("name: {}", &result);
|
||||
Ok(())
|
||||
}
|
||||
Reference in new issue
Block a user