@leofcoin/chain 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/LICENSE +88 -0
- package/README.md +4 -0
- package/_node.js +1 -0
- package/chain.js +1468 -0
- package/demo/index.html +18 -0
- package/dist/browser/peernet.js +101516 -0
- package/dist/chain.browser.js +19879 -0
- package/dist/chain.browser.js.tmp-browserify-65536332430764332457 +0 -0
- package/dist/chain.browser.js.tmp-browserify-77283953363424018335 +0 -0
- package/dist/chain.browser.min.js +2 -0
- package/dist/chain.browser.min.js.LICENSE.txt +10 -0
- package/dist/chain.js +1468 -0
- package/dist/contracts/factory.js +1 -0
- package/dist/contracts/nameService.js +1 -0
- package/dist/contracts/nativeToken.js +1 -0
- package/dist/contracts/validators.js +1 -0
- package/dist/lib.browser.js +16966 -0
- package/dist/native.js +1 -0
- package/dist/node.browser.js +68961 -0
- package/dist/node.browser.min.js +2 -0
- package/dist/node.browser.min.js.LICENSE.txt +12 -0
- package/dist/node.js +1 -0
- package/dist/standards/token.js +1 -0
- package/dist/token/native.js +1 -0
- package/dist/token.js +1 -0
- package/examples/contracts/token.js +7 -0
- package/lib.js +1 -0
- package/package.json +46 -0
- package/plugins/bundle.js +18 -0
- package/rollup.config.js +151 -0
- package/src/addresses.json +6 -0
- package/src/apis/token.lfcc +17 -0
- package/src/bytecodes.json +6 -0
- package/src/chain.js +593 -0
- package/src/config/config.js +15 -0
- package/src/config/main.js +4 -0
- package/src/config/protocol.js +5 -0
- package/src/contracts/factory.js +59 -0
- package/src/contracts/nameService.js +108 -0
- package/src/contracts/nativeToken.js +7 -0
- package/src/contracts/powerToken.js +7 -0
- package/src/contracts/proxies/factoryProxy.js +12 -0
- package/src/contracts/proxies/nameServiceProxy.js +12 -0
- package/src/contracts/proxies/nativeTokenProxy.js +12 -0
- package/src/contracts/proxies/validatorsProxy.js +12 -0
- package/src/contracts/proxies/votingProxy.js +12 -0
- package/src/contracts/proxyManager.js +7 -0
- package/src/contracts/validators.js +119 -0
- package/src/fee/config.js +3 -0
- package/src/lib.js +67 -0
- package/src/machine.js +130 -0
- package/src/messages/block.js +14 -0
- package/src/messages/bw-request.js +14 -0
- package/src/messages/bw.js +14 -0
- package/src/messages/contract.js +13 -0
- package/src/messages/last-block-request.js +14 -0
- package/src/messages/last-block.js +14 -0
- package/src/messages/transaction.js +14 -0
- package/src/node.js +55 -0
- package/src/protos/block.proto.js +26 -0
- package/src/protos/bw-request.proto.js +5 -0
- package/src/protos/bw.proto.js +7 -0
- package/src/protos/contract.proto.js +7 -0
- package/src/protos/last-block-request.proto.js +5 -0
- package/src/protos/last-block.proto.js +7 -0
- package/src/protos/transaction.proto.js +11 -0
- package/src/standards/Proxy.js +42 -0
- package/src/standards/Voting.js +3 -0
- package/src/standards/initializer.js +10 -0
- package/src/standards/proxyManager.js +66 -0
- package/src/standards/roles.js +65 -0
- package/src/standards/token.js +137 -0
- package/src/state.js +26 -0
- package/src/transactions/validator.js +29 -0
- package/src/typer.js +19 -0
- package/src/utils/utils.js +16 -0
- package/test/chain.js +119 -0
- package/test/contracts/token.js +40 -0
- package/test/create-genesis.js +58 -0
- package/test/index.js +3 -0
- package/webpack.config.js +167 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class Factory{#name="ArtOnlineContractFactory";#totalContracts=0;#contracts=[];constructor(state){state&&(this.#contracts=state.contracts,this.#totalContracts=state.totalContracts)}get state(){return{totalContracts:this.#totalContracts,contracts:this.#contracts}}get name(){return this.#name}get contracts(){return[...this.#contracts]}get totalContracts(){return this.#totalContracts}isvalid(hash,creator,contract,constructorParameters=[]){const message=new ContractMessage({creator:creator,contract:contract,constructorParameters:constructorParameters});return Boolean(message.hash===hash)}async deployContract(contractHash,creator,contract,constructorParameters=[]){if(contract.creator!==msg.sender)throw new Error("only a contract creator can deploy a contract");if(await contractStore.has(hash))throw new Error("duplicate contract");if(!this.isValid(contractHash,creator,contract,constructorParameters))throw new Error("invalid contract");await contractStore.put(hash,encoded),this.#totalContracts+=1,this.#contracts.push(hash)}}export{Factory as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class NameService{#name="ArtOnlineNameService";#owner;#price=0;#registry={};#currency;get name(){return this.#name}get registry(){return{...this.#registry}}get state(){}constructor(factoryAddress,currency,validatorAddress,price,state){state?(this.#owner=state.owner,this.#registry=state.registry,this.#currency=state.currency,this.#price=state.price):(this.#owner=msg.sender,this.#price=price,this.#registry.ArtOnlineContractFactory={owner:msg.sender,address:factoryAddress},this.#registry.ArtOnlineToken={owner:msg.sender,address:currency},this.#registry.ArtOnlineValidators={owner:msg.sender,address:validatorAddress},this.#currency=currency)}changeOwner(owner){if(msg.sender!==this.#owner)throw new Error("no owner");this.#owner=owner}changePrice(price){if(msg.sender!==this.#owner)throw new Error("no owner");this.#price=price}changeCurrency(currency){if(msg.sender!==this.#owner)throw new Error("no owner");this.#currency=currency}async purchaseName(name,address){if(await msg.call(this.#currency,"balanceOf",[msg.sender])<this.#price)throw new Error("price exceeds balance");try{await msg.call(this.#currency,"transfer",[msg.sender,this.#owner,this.#price])}catch(e){throw e}this.#registry[name]={owner:msg.sender,address:address}}lookup(name){return this.#registry[name]}transferOwnership(name,to){if(msg.sender!==this.#registry.owner)throw new Error("not a owner");this.#registry[name].owner=to}changeAddress(name,address){if(msg.sender!==this.#registry.owner)throw new Error("not a owner");this.#registry[name].address=address}}export{NameService as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class ArtOnline extends class Token extends class Roles{#roles={OWNER:[],MINT:[],BURN:[]};constructor(roles){if(roles){if(!(roles instanceof Object))throw new Error("expected roles to be an object");this.#roles={...roles,...this.#roles}}else this.#grantRole(msg.sender,"OWNER")}get state(){return{roles:this.roles}}get roles(){return{...this.#roles}}hasRole(address,role){return!!this.#roles[role]&&-1!==this.#roles[role].indexOf(address)}#grantRole(address,role){if(this.hasRole(address,role))throw new Error(`${role} role already granted for ${address}`);this.#roles[role].push(address)}#revokeRole(address,role){if(!this.hasRole(address,role))throw new Error(`${role} role already revoked for ${address}`);if("OWNER"===role&&1===this.#roles[role].length)throw new Error("atleast one owner is needed!");this.#roles[role].splice(this.#roles[role].indexOf(address))}grantRole(address,role){if(!this.hasRole(address,"OWNER"))throw new Error("Not allowed");this.#grantRole(address,role)}revokeRole(address,role){if(!this.hasRole(address,"OWNER"))throw new Error("Not allowed");this.#revokeRole(address,role)}}{#name;#symbol;#holders=0;#balances={};#approvals={};#decimals=18;#totalSupply=BigNumber.from(0);constructor(name,symbol,decimals=18,state){if(!name)throw new Error("name undefined");if(!symbol)throw new Error("symbol undefined");super(state?.roles),this.#name=name,this.#symbol=symbol,this.#decimals=decimals}get state(){return{...super.state,holders:this.holders,balances:this.balances,approvals:{...this.#approvals},totalSupply:this.totalSupply}}get totalSupply(){return this.#totalSupply}get name(){return this.#name}get symbol(){return this.#symbol}get holders(){return this.#holders}get balances(){return{...this.#balances}}mint(to,amount){if(!this.hasRole(msg.sender,"MINT"))throw new Error("not allowed");this.#totalSupply=this.#totalSupply.add(amount),this.#increaseBalance(to,amount)}burn(to,amount){if(!this.hasRole(msg.sender,"BURN"))throw new Error("not allowed");this.#totalSupply=this.#totalSupply.sub(amount),this.#decreaseBalance(to,amount)}#beforeTransfer(from,to,amount){if(!this.#balances[from]||this.#balances[from]<amount)throw new Error("amount exceeds balance")}#updateHolders(address,previousBalance){"0x00"===this.#balances[address].toHexString()?this.#holders-=1:"0x00"!==this.#balances[address].toHexString()&&"0x00"===previousBalance.toHexString()&&(this.#holders+=1)}#increaseBalance(address,amount){this.#balances[address]||(this.#balances[address]=BigNumber.from(0));const previousBalance=this.#balances[address];this.#balances[address]=this.#balances[address].add(amount),this.#updateHolders(address,previousBalance)}#decreaseBalance(address,amount){const previousBalance=this.#balances[address];this.#balances[address]=this.#balances[address].sub(amount),this.#updateHolders(address,previousBalance)}balanceOf(address){return this.#balances[address]}setApproval(operator,amount){const owner=globalThis.msg.sender;this.#approvals[owner]||(this.#approvals[owner]={}),this.#approvals[owner][operator]=amount}approved(owner,operator,amount){return this.#approvals[owner][operator]===amount}transfer(from,to,amount){amount=BigNumber.from(amount),this.#beforeTransfer(from,to,amount),this.#decreaseBalance(from,amount),this.#increaseBalance(to,amount)}}{constructor(state){super("ArtOnline","ART",18,state)}}export{ArtOnline as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class Validators{#name="ArtOnlineValidators";#totalValidators=0;#validators={};#owner;#currency;#minimumBalance;get state(){return{owner:this.#owner,minimumBalance:this.#minimumBalance,currency:this.#currency,totalValidators:this.#totalValidators,validators:this.#validators}}constructor(tokenAddress,state){state?(this.#owner=state.owner,this.#minimumBalance=state.minimumBalance,this.#currency=state.currency,this.#totalValidators=state.totalValidators,this.#validators=state.validators):(this.#owner=msg.sender,this.#minimumBalance=5e4,this.#currency=tokenAddress,this.#totalValidators+=1,this.#validators[msg.sender]={firstSeen:(new Date).getTime(),active:!0})}get name(){return this.#name}get owner(){return this.#owner}get currency(){return this.#currency}get validators(){return{...this.#validators}}get totalValidators(){return this.#totalValidators}get minimumBalance(){return this.#minimumBalance}changeOwner(owner){if(msg.sender!==this.#owner)throw new Error("not an owner")}changeCurrency(currency){if(msg.sender!==this.#owner)throw new Error("not an owner");this.#currency=currency}has(validator){return Boolean(void 0!==this.#validators[validator])}async addValidator(validator){if(this.has(validator))throw new Error("already a validator");const balance=await msg.staticCall(this.currency,"balanceOf",[msg.sender]);if(balance<this.minimumBalance)throw new Error(`balance to low! got: ${balance} need: ${this.#minimumBalance}`);this.#totalValidators+=1,this.#validators[validator]={firstSeen:(new Date).getTime(),active:!0}}removeValidator(validator){if(!this.has(validator))throw new Error("validator not found");this.#totalValidators-=1,delete this.#validators[validator]}async updateValidator(validator,active){if(!this.has(validator))throw new Error("validator not found");const balance=await msg.staticCall(this.currency,"balanceOf",[msg.sender]);if(balance<this.minimumBalance&&this.#validators[validator].active&&(this.#validators[validator].active=!1),balance<this.minimumBalance)throw new Error(`balance to low! got: ${balance} need: ${this.#minimumBalance}`);this.#validators[validator].active=active}}export{Validators as default};
|