gochain / gips Goto Github PK
View Code? Open in Web Editor NEWGoChain Improvement Proposals
GoChain Improvement Proposals
Aside from solving performance issues, GoChain also has a goal of fixing another huge problem with Ethereum and that is theft prevention. Theft on Ethereum is almost always related to bugs in smart contract code (besides gaining someone’s private key via social engineering, SMS hijacking, etc). $100’s of millions (if not billions) have been stolen in the past couple of years due to bugs in smart contracts.
One way to reduce the chance of theft by bugs is the ability to pause a contract (stop the theft) and upgrade it (fix the bug that makes the theft possible). This proposal is to enable both of those features. A nice side effect of this is that contracts can be upgraded for other reasons too, such as adding new functionality to a DApp or amending a contract which reflects real-life contracts.
The first step would typically be to pause a contract to stop someone from taking advantage of a known bug. Since this one doesn't change the contract or the data, the owner could pause a contract without the knowledge of other involved parties and this would not break trust. Also, this has to be able to happen immediately so letting a single entity be able to do this is a must.
One of the main selling points about smart contracts is that they are immutable and therefore you create a level of trust between different parties that may otherwise not trust each other. If one party can change the contract, you lose the trust. So how can we continue to have trust between parties while still allowing a contract to be upgraded? Upgrading the contract itself isn't the hard part, having a system that retains trust while allowing upgrades is the hard part.
The default upgradeability will remain the same as it is now, which means nobody can upgrade it. To enable an upgradeable contract, it must be set during the deployment of the contract.
The owner (the deployer) would set upgradeability rules on the contract during deployment which defines how a contract could be upgraded. Some example rules:
These rules would be visible to all, so a user can decide whether to interact with the contract or not. If they know the upgrade rules, they can make an informed decision.
Interacting with a smart contract requires the contract address. The contract state is also stored in the Merkle Patricia Trie under that same address. One requirement is that the address stays the same so people can continue to use the same address after the upgrade.
The owner would call upgradeContract()
function with the same parameters as deploying a contract plus the previous address to override.
In order to use the same address with new code, we could do one of the following (after it's been voted in):
calls
to the original contract address will be redirected to the new contract address. Downside of this is that it would double the storage space used and the old state would sit there forever. Would have to have some way to clean up old state after some time.codeHash
for the existing account. This would use the same storageRoot
with new code. Downside of this is that we might lose some context? Probably need to store a previousCodeHash too or something along those lines).Once deployed, the contract becomes active again (unpaused).
In Ethereum, ether calls are not compatible with ERC20 standard because ERC20 was conceived much later. Thus, ether cannot respond directly to ERC20 calls.
A healthy discussion can be found on this reddit thread.
Starting from "cryptopascal" comment!
https://www.reddit.com/r/ethereum/comments/6zfihg/ethereums_erc20_token_standard_has_been/#t1_dmwah0s
Increase minimum gas price.
This is a proposal to increase the minimum gas price that nodes will accept by 1000x.
UPDATE: GO price has gone up since this was created, so be sure to adjust for current price.
Gas on the GoChain network is extremely low. The following are the current transactions costs, USD equivalent based on $0.01 per GO:
The problems with the cost being too low:
Fees collected at current price at 10 transactions per second: $25.92 per month
At 1000x the price:
Increasing the gas would increase the value of the entire network, set a fair price for using the network (it shouldn’t be free), reduce the chance of network saturation and can lead to being able to reduce block or remove block rewards (see GIP-30).
Nodes would reject transactions below 2000 gwei. Currently 2 gwei.
eth_gasPrice would return a minimum of 2000 gwei.
WebAssembly has become a browser standard and is gaining steam as the new way to develop for the web. https://webassembly.org/ While it was intended for browsers, it's properties are actually very nice for blockchain development too.
Having this on GoChain would enable a whole new realm of developers that don't know Solidity and would not have to learn solidity to write smart contracts.
Burn all gas used for transaction fees.
Burn all transaction fees in order to reduce inflation.
Burning gas would reduce GO inflation and potentially even cause deflation after enough volume is reached.
Prereq: #29 increase fees
The primary goal is to eliminate inflation. By burning gas, we offset the block rewards and at a certain amount of transactions it will be deflationary. At less than 14 tps, rewards will be eliminated depending on the contract gas requirements. Anything over 14 will be deflationary meaning GO’s total supply will decrease.
All gas fees collected in a block are not taken by the node signing the block, and therefore effectively burned.
Q: how to publicly track burnt gas so we can calculate total supply?
Would it be possible to introduce a Function for Batch Transfer via a method call to allow 254 times more TPS?
The function would be similar
With a form of automated method calls
Similar to something like;
Function multiPartyTransferFrom(address _from, address[] _toAddresses, uint256[] _amounts) public {
/* Ensures _toAddresses array is less than or equal to 255 /
require(_toAddresses.length <= 255);
/ Ensures _toAddress and _amounts have the same number of entries. */
require(_toAddresses.length == _amounts.length);
for (uint8 i = 0; i < _toAddresses.length; i++) {
transferFrom(_from, _toAddresses[i], _amounts[i]);
}
This would allow a low cost, energy effiency way of transferring more TPS. The Method Call would automatically go into place as orders are being sent across the Blockchain network. It’s something similar to the BTC blockchain.
Sent with GitHawk
Bring Full Staking to GoChain Network
There is little benefit to hold Go due to very stable price action and no staking rewards. Future price increases are the only ways for holders to benefit from holding Go. There is little benefit to hold Go in the present short of speculation.
Bringing full staking to Go would reward holders for investing in the project and create immediate incentive for new users to invest. Allowing staking on the network would instantly create new demand for Go as users will want to take part in the staking rewards. This new demand will also drive the value of Go upwards. Allowing a percentage of the total supply of GoChain to be staked instantly reduces the circulating supply, creating deflation, further increasing the price of Go. Additionally, as users obtain Go to partake in the staking, more network activity will be created, exposing the crypto community to the speed and affordability of the GoChain network, thus bringing further attention to the project. Further, the rewards will create more volatility and thus price action as a certain number of users will sell their rewards on exchanges, increasing trading volume, volatility, price action, while bringing further attention to the project. Staking also moves GoChain towards being more decentralized as investors are rewarded for investing in the project and giving more users the power to vote on new governance proposals (such as this one).
Each new block generates 7 new GO which are currently paid to validators. The reward to validators would be cut in half to 3.5 Go. The other half would be used for staking.
Staking rewards would be paid out weekly based on the percentage each wallet contributes to the pool. This would be ~423,360 (86400 / 5 sec per block * 3.5 GO per block * 7 days) GO paid out each week or 22,014,720 per year.
As an example, if 110M GO were staked (~10% of total supply), APY would be ~20%.
Place your vote by clicking the 👍 here:
Upbring.org, an organization dedicated to advancing child well-being, wishes to join the GoChain network as a node operator. Upbring aligns with GoChain's core values and the foundation thinks they would be a welcome addition.
The Steering Committee voted unanimously +1, so now it's time for the community to vote.
Voting will go live within the next 24 hours. Please subscribe to this issue to receive notifications.
The driver behind this idea is to encourage adoption of the Gochain network.
Assumptions:
Total Go supply = 1,000,000,000 (1 Billion)
Signer Node Rewards = 4.5% of total supply adjusted per year.
Estimated amount of Go towards nodes per year: = 45000000 (45 Million)
Assuming 50 nodes reached after 12 months: 900,000 GO per node per year.
At a current conservative valuation of 0.05c per GO, the total dollar value that signer nodes are rewarded with = $2.25 million per year.
This suggestion is to break up the 4.5% into a few different components that may encourage network / protocol adoption as follows:
Once a company / enterprise is approved as a signer node, they receive rewards on the following basis:
Only 90% of the 45 million GO to be used for signer nodes: (40,500,000 per year at the current rate)
Year 1 - 50% of rewards - 50% of reward towards dApp development fund.
Year 2 - 60% of rewards - 40% of reward towards dApp development fund.
Year 3 - 70% of rewards - 30% of reward towards dApp development fund.
Year 4 - 80% of rewards - 20% of reward towards dApp development fund.
Year 5 - 100% of rewards - 00% of reward towards dApp development fund.
The remaining 10% of the signer node rewards can be used in a number of ways in order to encourage further community adoption / or even some form of CSR.
Airdrops to existing community members based on current Go allocation.
Gochain sponsored community events. University Scholarships (Blockchain based).
Other ideas welcome.
To be discussed:
In Summary:
The 5 year reward system should encourage signer nodes to act in the interest of the Gochain network at all times and be in the for the long run as rewards increase with time up and until the 5 year limit when 100% of rewards are paid out.
As the Gochain network grows, it is also important to understand how the existing nodes run by Gochain use the rewards accumulated by their own nodes. The community has no doubt that these funds are used towards building out partnerships / enhance the eco-system, but in the order to avoid unnecessary negative scrutiny in the future it would be helpful to have a single rule that fits all signer nodes in this regard.
Open to further discussion / suggestions.
One of the primary longer term goals of GoChain is theft and loss prevention. In blockchain, both are equally as bad to a holder of coins or tokens as either way you lose everything. Upgradeable smart contracts which GoChain will be implementing can help prevent theft, but it doesn’t prevent loss. Loss can come in many forms such as losing your private key or death. If you die and your family is unable to obtain your private key, the funds will be inaccessible and any inheritance is lost. This improvement proposal is focused on the death scenario and being able to pass on your funds to your beneficiaries.
This feature would allow a user to set a number of beneficiaries tied to an account (an address) that would allow the beneficiaries to claim the user’s funds upon death.
The owner of account A can set the beneficiaries of her account through a signed message to a GoChain API endpoint. The user would set which accounts can claim the funds and what percentage they get. The message also includes an inactivity timeout at which point the beneficiaries could claim the funds. There could be multiple levels of beneficiaries in case the first level is unable to claim the funds (ie: they have passed).
An example of this message might look like this:
In this example, if account A has no activity for the inactivity timeout, 6 months in this example, then the next level of beneficiaries can “claim” the funds for the timeout set for that level. This can continue for many levels (todo: any limit on levels?).
There could be a final account in the tree that the funds would automatically be transferred to after the last timeout in the tree, without requiring a claim.
In an effort to support stablecoins on GoChain, backed by existing stablecoins on Ethereum (USDC, TUSD, PAX, etc), I propose the following cross chain transaction concept, aka GOST Protocol, to be built into GoChain. This concept keeps the transfers decentralized as the protocol is built directly into GoChain and requires all nodes in the network to participate. Tokens can be transferred to GoChain and transferred back to Ethereum at any time. This would make GoChain one of the first (if not the first) truly interoperable blockchains.
Much faster transaction speeds, supports much higher transaction volumes and much lower fees that can support day-to-day purchases such as buying coffee or playing games.
As of right now, the average transaction fee for Ethereum is $0.15:
And the average transaction fee for Bitcoin is $3.66:
Those fees are much too high for day-to-day transactions. You can't use it as payments for coffee if the fee costs just as much as the product.
Similarly you can't buy coffee if customers have to wait at the cashier for minutes or hours. GoChain transactions are almost always under 5 seconds.
Bitcoin typically takes a minimum of 10 minutes for a single block confirmation since block times are 10 minutes. It's usually longer since the network is typically congested. Ethereum block times are 15 seconds which is a vast improvement over Bitcoin, but the problem is the Ethereum network is also almost always congested so it typically takes minutes for a transaction to make it into a block.
Here is an example of two transactions at the same time performed at a random day/time on GoChain and Ethereum. Ethereum took 3 minutes 29 seconds to make it into a block while the GoChain transaction took 1 second.
Consensus so far in blockchains has been limited to agreement on a single blockchain (ie: the database). There is no reason why consensus has to be restricted to a single data set. GOST Protocol works by the GoChain node network coming to consensus on both GoChain data and another chain's data (Ethereum to start). After a certain number of blocks have passed, we can be fairly certain that the data is set in stone and can no longer be modified, much like exchanges accept transactions after a certain number of block confirmations.
Each token on GoChain represents exactly one of the same token on the original chain. Let’s use USDC in this example. Transferring to GoChain requires two steps:
User has to burn tokens on GoChain to get the original tokens back. This could work the following way:
Beyond this initial use case, this paves the way for massive scalability increases for GoChain by enabling multiple GoChain networks to work together. GoChain -> GoChain transactions means we can create any number of GoChain shards which can then transact across each other.
how about you wont advertise your chain with promise of becoming 10 times more decentralized than ethereum if you are looking to run it in 50 nodes that would run on centralized cloud services like AWS and azure.
instead though you could act honest and advertise that you are scaling ethereum with chain that is run by trusted network and will have interoperability with ethereum. once again you dont even need to code interoperability yourself but it is something parity/polkadot provides to you in silver platter(made to operate with POA):
https://github.com/paritytech/parity-bridge
Placeholder.
New GoChain node validators onboarded and operating during the period of 15 March 2021 - 15 March 2022 will allocate a minimum of 50% of monthly rewards to the GoChain Foundation for specified R&D work, hackathons, and other innovation-focused work.
Provide additional utility and deepen engagement among all GoChain node signers, the Foundation, and community, while reinforcing and further supporting the Proof of Reputation consensus framework. The opportunity for GoChain Foundation and the broader community to support node innovation and Environmental, Social, and Governance (ESG) objectives should not only help to realize additional value for the overall ecosystem & network but also have a positive impact on society and the world.
During the period of 15 March 2021 - 15 March 2022, 50% of any new node signer’s token rewards will be sent to a specific GoChain Foundation wallet address each month. New node signer(s) and the Foundation will agree upon specific blockchain-based work, i.e., research initiatives, POC, hackathons, etc. which will be funded by the token balances.
In addition to the Foundation, community members will have the opportunity to participate, earn tokens and support the research projects. The wallet and all tokens will be publicly accounted for and verified for each initiative. After this 12-month period, all node signers for the GoChain network going forward will be required to allocate a minimum of 50% of monthly rewards to fund similar innovation or ESG-related research initiatives.
Instead of proving you have X amount of GO to vote with like we've done in the past, voters would vote with GO which would be burned.
You could also potentially have a blind vote so nobody knows what the current tally is. In this case, each voter would choose their answer then get an address to send to. At the cutoff time, all the addresses balances would be summed up then burnt.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.