순수지분증명(PPOS)형식의 알고리즘 암호화폐

home link

reference material


Exchanges that listed the coin
To be released
Project introduction

알고랜드(Algorand)는 분산화, 확장성 및 보안성 모두를 제공하는 플랫폼으로 블록체인 트릴레마의 해결을 목표로 하고 있습니다. 알고랜드는 새롭게 부상하는 탈중앙화 경제 시스템에서 기존 비즈니스 진입자 및 새로운 프로젝트 신규 진입자 모두가 운영할 수 있는 기반을 제공합니다. 그리고 알고랜드의 혁신적인 무허가형 순수지분증명 프로토콜은 전 세계 사용자들을 위한 시스템 구축에 요구되는 규모, 개방형 참여, 트랜잭션 완결성을 지원합니다.

Executives and partners

Silvio Micali


Steve Kokinos





How to Generate Algorand Ac...

In our previous posts we looked what Opting into an Algorand Asset was and how to build a reactive front-end component using React in anticipation of Algorand 2.0. In this post, we will look at what creating an account on Algorand looks like in JavaScript, as well as constructing a transaction object, signing the transaction and broadcasting the transaction to the network.Main MethodsWe will be using a few methods from the algosdk to make all of this happen:generateAccount() returns a new Algorand address and its corresponding secret keymnemonicToSecretKey() takes a mnemonic string and returns the corresponding Algorand address and its secret keysignTransaction() takes an object and returns a signed blobsendRawTransaction() takes an encoded signed transaction and broadcasts it to the networkSet up your environmentFirst things first - spin up a dockerized Algorand node using sandbox. There is a full tutorial on how to get setup and started with sandbox. You need a way to talk to Algorand and running a node is the best way to do so. You can also use PureStake API service as a way to connect to the network, however, in this tutorial I will be doing so using sandbox.Once you’ve downloaded sandbox and have started the node using /sandbox up which bootstraps from TestNet binaries. Get your React App up and running using create-react-appcreate-react-app [APP-NAME]Make sure you have the create-react-app environment installed on your machine. This tools makes React development very easy because it sets up and configures your dev environment for you using the latest JS features and optimizes your app for production. I’ve decided to name my app “genacct”, but you can name yours whatever you’d like.genacct/└── node_modules/├── public/├── src/│ ├── App.css│ ├── App.js│ ├── App.test.js│ ├── index.css│ ├── index.js│ ├── logo.svg│ ├── serviceWorker.js│ ├── setupTests.js│ ├── bootstrap.css│ ├──│ ├── bootstrap.min.css│ └──└── package-lock.json└── package.json└── README.mdThis is be what your directory should tree look like at this point.We are also going to have to install some dependencies to make this app work.React Router DomAlgosdkBootstrapJqueryPopper.jsclipboard-copynpm install --save react-router-dom npm install algosdknpm install bootstrapnpm install jquerynpm install popper.jsnpm install clipboard-copyCraft the React AppBegin by renaming App.js to App.jsx . JSX is a syntax extension to JavaScript and it describes what the UI should look like. JSX produces React elements that are returned from components and rendered to the DOM.Next, import algosdk and instantiate the Algorand Client.Inside of src create a directory called services and a file inside of services called algorandsdk.js arguments that are being passed in to token server and port should be the same, but if you’d like to find these values for yourself. Enter the sandbox container with the ./sandbox enter command and cat out the values for algod.token and enterEntering /bin/bash session in the sandbox container...root@9e650578955b:/opt/algorand/node# cat data/algod.tokenaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaroot@9e650578955b:/opt/algorand/node# cat data/[::]:4001Now let’s begin to structure the application a bit. Inside of src create the two other directories: assets and components . Create three more directories inside of the components directory called pages stateful and stateless .Create a file called appRouter.jsx and use the code snippet below as the boilerplate to get started. back to the index.js file that was created with the create-react-app tool and import the following code. will import the popper.js and bootstrap dependencies as well as render elements to the DOM from your App Router. React Router is routing library for React, it immensely simplifies life for both frontend and backend developers. React Router keeps your UI in sync with your URL and introduces a new dynamic, component based approach to routing, as opposed to static routing.ComponentsNow we are ready to build out our components and render them in the appropriate places.Create Account Button ComponentIt is good practice to break everything up into simple, small and reusable components for debugging and for cleaner development. We will start with the smallest pieces, the foundations of the application, and build our way up. What we want is for the user to be prompted to generate an account or restore an account when they first come to the app, if they haven’t generated one already.Create your first component inside of the stateless directory called createaccountbutton.jsx and import the following code. component makes use of the generateAccount(); method from the algosdk and will returns an Algorand account address and a secret key pair.2. Restore Account Button ComponentWe also want to be able to restore or import an account into our app because the user might have a specific account that they want used within the application. To do this, create another file inside of the stateless directory called restoreaccountbutton.jsx that in this file we are calling the mnemonicToSecretKey() method from the algosdk which takes a 25-word string mnemonic phrase and returns a public private key pair.3. Create Account Page ComponentNow that we have all the components we need to create or recover an account, let’s write the Create Account and Restore Account pages. We will then go into routing to these pages from a header component that we will write later on. Create a new file inside of pages and call it createaccountpage.jsx page will create a new account and push it to localstorage.4. Restore Account Page ComponentGo ahead and make another file inside of pages and call this one restoreaccountcomponent.jsx page will get the restored account keys from the restoreaccountbutton.jsx and push it to localstorage.Transaction Construction and Broadcasting5. Suggested Fee ComponentNow let’s build out the transaction page and transaction and suggested fee components. Blockchain development requires a few added steps from what full-stack developers might be used to. Besides checking the block explorers in between transactions and using the dispensers to get some funds for testing, you also need to include fees as an argument when constructing transactions. However, transaction fees are dynamic because they are typically dependent on several other factors in a blockchain network. This component simplifies that step and returns the suggested fee parameter from the Algorand client that you instantiated in algorandsdk.js . Create a file called suggestedfeecomponent inside of the component/stateful directory. component will show you the suggested fee and we will render this inside of the next component we will build out.6. Transaction ComponentCreate a file inside of stateful and call it transactioncomponent.jsx component can be used to send online transaction and can save transaction to be signed offline using an account mnemonic given as a propNotice that in this component, we are recovering the account by calling the algosdk.mnemonicToSecretKey() method and passing in the mnemonic as a prop in the sendtransaction() method.sendTransaction = async () => {let mnemonic = this.props.mnemonic;let recoveredAccount = algosdk.mnemonicToSecretKey(mnemonic);We are constructing the transaction (txn) object from the recoveredAccount and passing in the address as the first argument.let txn = { from: recoveredAccount.addr, to: this.state.addressTo.value, fee: params.fee, amount: Number.parseInt(this.state.amount), firstRound: params.lastRound, lastRound: endRound, genesisID: params.genesisID, genesisHash: params.genesishashb64, note: algosdk.encodeObj(this.state.note)};The transaction is signed using signTransaction() which accepts the txn as the first argument and the secret key of the from account address.let signedTxn = algosdk.signTransaction(txn,;And finally, we are broadcasting the signed transaction to the network using the sendRawTransaction() method that accepts an encoded signed txn blob.7. Transaction Page Component component simply renders the Transaction Component that we built out in the previous step.Final Components — Transaction PageThe last few component steps involve the accounts page. Once a user generates or recovers an account, they should be routed to a homepage of sorts that list all the accounts they’ve generated or recovered and has a navbar at the top to switch to other features (like creating a transaction).8. Account Detail ComponentCreate a file inside of stateless and call it accountdetailcomponent.jsx this is where we will be rendering a list of different available accounts from the accounts page as well as the option to generate a new account or recover an account. component will allow the user to switch between accounts. You will be rendering an image in this component that will ultimately display in the accountpage.jsx . Create a directory inside of assets called images and drag a small Algorand image from google of your choice, this will display in the accountdetailcomponent.jsx . You can call this image whatever you’d like.9. Account ComponentNow create a file inside of stateful called accountcomponent.jsx component will show account details and provides helper methods to changeAccount, getAccountBalance and getAccountTransaction.10. Account Page ComponentThe final component that we need to complete this version of the app is an account page component. So go ahead and create a accountpage.jsx file inside of your pages directory and import the following code. and Header ComponentWe have finished building our components!Now let’s step back into appRouter.jsx and start importing the components and pages that you just wrote. that we use the exact param which is useful for our purposes as it returns the routes for /account if there is an address cached in localstorage or to /create, which renders our Create Account Page component. React uses partial matching for routes, so the exact param disables the partial matching and makes sure that it only returns the route if the path is an EXACT match to the current url.The final component we need to write before rendering our complete application is the header to navigate from page to page.11. Header ComponentCreate a file called headercomponent.jsx inside of stateless this header component we are only rendering the two pages who’s routes were defined in the App Router Account Page Component ( /account) and Transaction Page Component ( /transaction).To wrap this whole things together, go into your App.jsx and import the following code, in your editor console or back in terminal, run npm start and your app should be rendering nicely on localhost:3000 !I am using to dispense test Algos and as my block explorer to see details about my accounts and transactions.Feel free to clone the repo and use this as a building block for your Algorand Apps! more information please visit:Algorand Developer Docs - Algorand Developer DocsAlgorandThe First Pure Proof of Stake Blockchain PlatformHow to Generate Algorand Accounts and Transactions using React was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


20. 01. 22

Introducing Sandbox: The qu...

Running a node on Algorand is a very fast and straightforward process.Sandbox makes the process of node creation and configuration seamless with several helpful commands for containerization and process management. It is simply a quick and easy way to create and configure an Algorand node using Docker.Why use Sandbox?Sandbox simplifies the process of node configuration and maintenance allowing you to quickly spin up a containerized node on any of the three Algorand networks as well as managing it through the sandbox environment.Note: Sandbox is directed at learning and not meant for production.How to Use SandboxFirst, make sure you have Docker installed. Clone the repository, which can be found here: and if you’re using a Mac, like I am, make sure you have wget installed. If you use homebrew as your package manager, simply run:brew install wgetTo get started run the up command./sandbox upThis will spin up a docker container defaulting to the testnet binaries.Use docker commands to list the containerdocker container lsThis should return the one container that was initialized from the previous sandbox command. Sandbox manages one active container at a time. Note that you will see multiple containers if you have other containers initialized from other docker processes.You can configure sandbox to run a node on any of the three networks by passing in the network name:./sandbox up [mainnet||testnet||betanet]Note that when you run ./sandbox up [NETWORK_NAME] it will initialize with a snapshot and your node will sync up to the latest round. To skip the snapshot initialization and begin downloading the blockchain from the first round, simply pass in the -s flag../sandbox up [mainnet||testnet||betanet] [-s]If you’ve already configured sandbox for a specific network (you spun up a docker container using sandbox and are running a node) you can tear down the environment and start it back up at any time../sandbox downRunning docker container ls should not return a container ID. Spinning it back up is done using ./sandbox up . In this case, the node will pick it up from the round it was in when the the sandbox environment was taken down.You can also run ./sandbox clean to stop and delete the container and data directory. This is different from ./sandbox down as the container in this case is removed.The ./sandbox test command is helpful because it sends REST calls that hit algod and kmd as well as running some goal commands.~$ ./sandbox testTest command forwarding...~$ docker exec -it sandbox uname -aLinux 13ad4f9fd7b8 4.9.184-linuxkit #1 SMP Tue Jul 2 22:58:16 UTC 2019 x86_64 x86_64 x86_64 GNU/LinuxThe result for goal node statusTest algod...~$ docker exec -it sandbox /opt/algorand/node/goal node status -d /opt/algorand/node/dataLast committed block: 4146633Time since last block: 0.6sSync Time: 0.0sLast consensus protocol: consensus protocol: for next consensus protocol: 4146634Next consensus protocol supported: trueHas Synced Since Startup: falseGenesis ID: testnet-v1.0Genesis hash: SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=The result of hitting the algod API:Test Algod REST API...~$ curl localhost:4001/v1/status -H "X-Algo-API-Token: $(cat data/algod.token)"{"lastRound":4146365,"lastConsensusVersion":"","nextConsensusVersion":"","nextConsensusVersionRound":4146366,"nextConsensusVersionSupported":true,"timeSinceLastRound":1243605287,"catchupTime":0,"hasSyncedSinceStartup":false}The logs command in sandbox is the same as ./carpenter -d data which is Algorand’s debugging tool that reads the node log file and formats the output../sandbox logsThis returns an output that looks like this4146536.0.2: BlockPipelined NXY5Z-4146537.0.0|4146536.0.2: VoteAccepted(114/2700) RD2VU-4146536.0.1|4146536.0.2: VoteAccepted(66/369) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(60/429) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(19/2719) RD2VU-4146536.0.1|4146536.0.2: VoteAccepted(70/499) RD2VU-4146536.0.2|4146536.0.2: ProposalAccepted YD2W5-4146537.0.0|4146536.0.2: BlockPipelined YD2W5-4146537.0.0|4146536.0.2: VoteAccepted(59/558) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(39/597) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(14/611) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(51/662) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(56/718) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(10/728) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(141/2860) RD2VU-4146536.0.1|4146536.0.2: VoteAccepted(116/2976) RD2VU-4146536.0.1|4146536.0.2: VoteAccepted(56/784) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(63/847) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(59/906) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(66/972) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(79/1051) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(27/1078) RD2VU-4146536.0.2|4146536.0.2: VoteAccepted(67/1145) RD2VU-4146536.0.2|4146536.0.2: ThresholdReached(1145/1112) RD2VU-4146536.0.2|4146536.0.0: RoundConcluded RD2VU- |4146536.0.0: RoundStart RD2VU- |4146537.0.0: BlockAssembled YD2W5-4146537.0.0|Using this tool, you can watch the agreement service write blocks to the ledger in realtime.Sandbox is highly flexible and you can interact with goal in a few different ways../sandbox statusThis will return the same output as ./sandbox goal node statusIf you are familiar with running a node on Algorand, you would normally use the Algorand cli "goal" to manage your node. You can do the same thing with sandbox by running./sandbox goal (args) or by running ./sandbox enter which basically puts a shell in sandbox allowing you to interact with the node and run commands from within the container.~$ ./sandbox enterEntering /bin/bash session in the sandbox container...root@5296a82a0746:/opt/algorand/node$ lsCOPYING algokey catchupsrv msgpacktool update.shalgocfg algorand@.service.template data genesisfiles node_exporter updateralgod backup goal sudoers.templatealgoh carpenter diagcfg kmd systemd-setup.shroot@5296a82a0746:/opt/algorand/node$There are permission issues here so you cannot do things like create a private network or configure testnet or betanet the way you traditionally would, but it allows you to interact with the Algorand node in every other way.The final, more experimental feature in Sandbox is the tutorial. Running ./sandbox introduction gives you a great step by step walkthrough of working with an Algorand node which includes creating a wallet, creating accounts, funding accounts and broadcasting transactions to the network. check out sandbox and submit features requests to improve this great tool!algorand/sandboxResourcesFor more information please visit:Algorand Developer Docs - Algorand Developer DocsAlgorandHack Your Way to the Borderless EconomyIntroducing Sandbox: The quick way to get started on Algorand was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


20. 01. 07

2019 Wrap-Up for Algorand Devs

As 2019 comes to a close, here is a wrap-up of the three latest features launched on Algorand at layer-1 with links to content to help developers get started quickly.Algorand Standard Assets (ASA)Represent any asset at layer-1 with ASAs and benefit from the same speed and security as the native Algo. Trade those assets with each other and the Algo.Read my previous blog post for an overview of ASAs. Check out our developer docs for an overview of core usage patterns as well as more detailed flows through each of the SDKs. Also, check out Sam’s blog post on opting in to assets with React.TestNet DevCoinsIf you are looking to get hands-on, try out our related task on Forums. Opt-in to the Algorand DevCoin asset on TestNet and we will send you 10 DevCoins in return.Atomic TransfersSwap a group of assets simultaneously without having to trust the other parties involved. Atomic transfers are implemented as group transactions, where either all transactions in the group are confirmed or none are confirmed.Read more about atomic transfers in Russ’ blog post or read the docs on how to create an atomic transfer with goal and with the SDKs.TestNet AtomicTransferBadgeTry out our Atomic Transfers task on Forums and trade in 10 DevCoins for 1 AtomicTransferBadge on TestNet.Algorand Smart Contracts (ASC1)Backed by a new, assembly-like language called TEAL (which stands for Transaction Execution Approval Language), users can create stateless smart contracts at layer-1 on Algorand.Read Jason’s blog post on Algorand Smart Contracts. Read the docs for contract walkthroughs, how to use Smart Contracts in the SDKs, and much more.TestNet TEAL BadgeGet started building your first Smart Contract by participating in our related Forums task. Share ideas and best practices with the rest of the community.With these features combined…Mix and match these new features and a number of use cases become possible. Here are just a couple examples to get started…Split Payments — Alice and Bob write a song together and agree on equal royalty paymentsAlice and Bob create a Smart Contract account with logic that allows for a group transaction with two payments. The payments must go to Alice and Bob, respectively, and the payment amounts must be equal.Alice and Bob provide the address of the Smart Contract to third parties for them to deposit royalty payments for use of their song.Alice and Bob can withdraw funds at any time, but the withdrawal will only be valid if they issue two transactions with equal payments to each other.Alice and Bob withdraw royalty payments in equal amounts. Uses Atomic Transfers and Algorand Smart Contracts.Limit Order — Alice wants to sell shares of a building she owns at a certain priceAlice creates an Algorand Standard Asset that represents shares of her building, called AliceToken.Alice creates a Smart Contract with logic that says that any address can buy an AliceToken for at least 5 Algos. In other words, the contract logic states that anyone can issue a group transaction that contains two transactions: 1) a transfer of AliceTokens from the Smart Contract account to the desired receiving account and 2) a transfer of Algos to Alice’s account, where the amount of Algos to AliceTokens is at a ratio of 5 to 1 or greater.Alice sends her AliceTokens to the Smart Contract account and advertises the opportunity.Bob creates a group transaction that sends 1 AliceToken to himself (from the Smart Contract account) and 5 Algos to Alice.Bob buys 1 AliceToken for 5 Algos. Uses Algorand Standard Assets, Atomic Transfers, and Algorand Smart ContractsWe are looking forward to see what other use cases the community will bring to life in 2020! Happy New Year everyone!If you want to stay in the loop with the latest developer features and experiences on Algorand, sign up for the developer newsletter.Also, if you have a working application you would like to share for a potential award, check out the Algorand Foundation’s Developer Awards Program .2019 Wrap-Up for Algorand Devs was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 12. 27

Contributing to the Algoran...

A point of pride here at Algorand is our devotion and commitment to being an open-source blockchain. The code behind the Algorand blockchain is open-sourced and publicly available for anyone to audit, use, and build upon.In order to achieve a blockchain maintained by a dedicated and decentralized-minded community, we want to encourage more external collaboration. Since our initial launch in June, we’ve been working diligently to expand Algorand’s core feature set (see our latest release here). While we’ve been hard at work developing the most sought after features and tools, we’ve also been collecting a healthy backlog of innovative ideas, features, enhancements, and tools that would be perfect for community collaboration.If you’re interested in browsing our github backlog for an idea that inspires you, the best place to start would be our contribution guide. From there, you’ll be able to see how we work as an organization, how to navigate our many repos, and how we incorporate external collaboration. Without going too deeply, the ideal flows (in a nutshell) look something like the following:Creating an issueScenario: You want to share an exciting idea or bring attention to a certain bug. This idea may have come up from reading the code, identifying tech debt on your own, finding bugs, finding typos, etc.Navigate to an Algorand GitHub repository (repo). For general issues, head to our main algorand repo.If you want to create an issue specific to a certain SDK or tool (such as Algorand Python SDK), browse or search our repos first from our GitHub homepage.Create a GitHub issue (from the appropriate issue template if available)You can also try to tag your issue with any applicable labels such as bug, enhancement, feature request, etc.That’s it! Internally, we have frequent engineering triage meetings where we look over new issues and pull-requests and review/prioritize them accordingly. Because you created the issue, you’ll be notified of all activity on the issue.Walkthrough of creating an issue.Contributing codeScenario: You see an open and unassigned issue in one of our GitHub repos and want to contribute code to resolve/implement that issue.You modify Algorand code based on an existing enhancement or bug issue. Hint: Keep an eye out for issues tagged as “good first issue” if you aren’t sure where to start.You create a pull request.Other than potential back and forth with suggestions or questions, that’s it! The internal Algorand team reviews all PRs, and if your change passes our guidelines (as documented in our contribution guide) we will merge it. Keep in mind that the smaller the changes, the quicker we can review and accept those changes into the codebase!Sample view of some of the tasks that exist in our main repository.Hopefully this illustrates how quick and easy it is to interact with our code and our core technology development. We hope you’ll give it a try!That being said, if the documentation or contribution guidelines are not clear, feel free to just create an issue in our main repo and it will be reviewed by someone on the team. If you still have questions about the process, feel free to tag me, ian-algorand (Senior Product Manager at Algorand, Inc.), and I’ll personally make sure we respond to your GitHub issue or PR.Contributing to the Algorand Blockchain was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 12. 17

Understanding Algorand Smar...

As part of the Algorand Version 2.0 release, the network now supports Algorand Smart Contracts (ASC1), which are layer-1 smart contracts. Not only do these contracts work as part of the protocol, but they also can interact with all the additional layer 1 features in the 2.0 release. This includes Atomic Transfers and Algorand Standard Assets (ASA). are Algorand Smart Contracts?Algorand Smart Contracts are small programs written in an assembly-like language that can be used as a replacement for signatures within a transaction. This language is named Transaction Execution Approval Langauge or TEAL. More on the TEAL language specification in a bit.TEAL programs have one primary function and that is to return true or false and are used to analyze and approve transactions. Standard transactions are signed with either a private key or multisig set of private keys. With the introduction of ASC1, they can now be signed with a TEAL program. This is called a logic signature.TEAL code has two basic usage scenarios; as a contract account or as a delegated signature.When used as a contract account the TEAL code is compiled, which returns an Algorand address. The contract account address can be sent Algos or Algorand Assets from any account using a standard transaction. When sending from a contract account the logic in the TEAL program determines if the transaction is approved. Contract accounts are great for setting up escrow style accounts where say you want to limit withdrawals or you want to do periodic payments, etc.You can also use TEAL to do delegated signatures, which essentially means you sign a TEAL program with your private key or multisig keys and you can save this logic signature to give to someone else to submit transactions with your authority. The TEAL program can limit the amount of authority you delegate. For example, you can create a delegated signature that allows a utility company to remove up to x Algos every 50000 blocks from your account.How can you call Algorand Smart ContractsTEAL programs can be written with any editor, but currently can only be compiled using the goal command-line tool. The command-line tool provides the ability to use these compiled programs within transactions. In addition, the command-line tool also provides the ability to actually test the program before you use it with a real transaction. The simplest program you can write in TEAL is probably the following:// simple.teal// Do not use this in a real applicationint 1While very simple, this program should never be used in production as it will always return true authenticating a transaction when used. We use it here for illustration purposes of how to call TEAL programs.You would compile this program with goal using the following command:goal clerk compile simple.tealThis would produce the following output:$ goal clerk compile simple.tealsimple.teal: 6Z3C3LDVWGMX23BMSYMANACQOSINPFIRF77H7N3AWJZYV6OH6GWTJKVMXYNotice that we have an address. This is the address you want to use if you plan on using this as a contract account. In this case, we want to use it to create a delegated signature, so we actually need to sign the teal program with our private key. The following example shows using goal to compile and sign in one operation.goal clerk compile simple.teal -o mydelegatedsig.lsig -s -a C3MKH24QL3GHSD5CDQ47ZNQZMNZRX4MUTV6LVPAXMWAXMIISYSOWPGH674 -d ~/node/dataIn this case, we are signing the logic with the address specified with the -a parameter. Note that if you do not have a default wallet assigned you will also need to specify the wallet with the -w parameter.Now we have the file mydelegatedsig.lsig which contains a logic signature that can be used in a transaction by anyone that has this file. Because the logic always returns true, this essentially gives anyone full access to your account!The created logic signature could be used in a transaction like:goal clerk send -f C3MKH24QL3GHSD5CDQ47ZNQZMNZRX4MUTV6LVPAXMWAXMIISYSOWPGH674 -a 1000000 -t STF6TH6PKINM4CDIQHNSC7QEA4DM5OJKKSACAPWGTG776NWSQOMAYVGOQE -L mydelegatedsig.lsig -d ~/node/dataNote in this case the -f is the account that signed the logic signature and the -t option is the receiver of the transaction. Also, note that the transaction fee is paid by the account that signed the logic signature.You can also use the -o option in the above example to write the signed transaction out to file and it will not be submitted to the network. You can use the output with the dryrun command to see how the TEAL is actually processed.$ goal clerk send -f C3MKH24QL3GHSD5CDQ47ZNQZMNZRX4MUTV6LVPAXMWAXMIISYSOWPGH674 -a 1000000 -t STF6TH6PKINM4CDIQHNSC7QEA4DM5OJKKSACAPWGTG776NWSQOMAYVGOQE -L mydelegatedsig.lsig -d ~/node/data -o out.stxn$ goal clerk dryrun -t out.stxntx[0] cost=2 trace:1 intcblock => <empty stack>4 intc_0 => 1 0x1- pass -For more examples of using goal with TEAL see the ASC1 Tutorial. This tutorial walks you through many of the goal commands and what you can do with a TEAL program. See the TEAL Language Specification section of this post to get more details on how to write a TEAL program. The Algorand SDK also provides methods for calling TEAL programs as well. That topic is covered in the next section.Using the Algorand SDKs with Algorand Smart ContractsThe binary files created by compiling a TEAL program can be loaded and used in any of the Algorand SDKs, which supports Java, JavaScript, Go and Python. The ASC1 SDK Usage page covers each language in detail. For illustrative purposes, we can show using the simple.teal program above to call a transaction with the delegated signature. This program replicates the commands in the previous section and is implemented to run with Node.js.const algosdk = require('algosdk');const fs = require('fs');// Retrieve the token, server and port// values for your installation in the and algod.token files within the data directoryconst token = "yournodetoken";const server = "";const port = 8080;// Recover the account// C3MKH...var mnemonic = "awake climb practice ten mutual calm " + "expand danger twelve inhale near harvest ensure " + "life heart okay spend priority spare target " + "flock wrong essence absent poet";var recoveredAccount = algosdk.mnemonicToSecretKey(mnemonic);console.log(recoveredAccount.addr);// instantiate the algod wrapperlet algodclient = new algosdk.Algod(token, server, port);(async() => { // Get the relevant params from algod // for suggested parameters let params = await algodclient.getTransactionParams(); let endRound = params.lastRound + parseInt(1000); let fee = await algodclient.suggestedFee(); // These are the base64 dump of the // compile simple.teal program // Used command line $ cat simple.teal.tok | base64 let program = new Uint8Array(Buffer.from("ASABASI=", "base64")); // makeLogicSig method takes the program and parameters // in this example we have no parameters let lsig = algosdk.makeLogicSig(program); // sign the logic with your accounts secret // key. This is essentially giving your // key authority to anyone with the lsig // and if the logic returns true // exercise extreme care // If this were a contract account usage // you would not do this sign operation lsig.sign(; // At this point you can save the lsig off and share // as your delegated signature. // The LogicSig class supports serialization and // provides the lsig.toByte and fromByte methods // to easily convert for file saving and // reconstituting and LogicSig object // Create a transaction let txn = { "from": recoveredAccount.addr, "to": "STF6TH6PKINM4CDIQHNSC7QEA4DM5OJKKSACAPWGTG776NWSQOMAYVGOQE", "fee": params.fee, "amount": 200000, "firstRound": params.lastRound, "lastRound": endRound, "genesisID": params.genesisID, "genesisHash": params.genesishashb64 }; // Create logic signed transaction. // Had this been a contract account the lsig would not contain the // signature but would be submitted the same way let rawSignedTxn = algosdk.signLogicSigTransaction(txn, lsig); // Save the signed transaction file for debugging purposes // Use with goal clerk dryrun -t simple.stxn to // see how the logic is processed // Comment out if you do not plan on using dryrun fs.writeFileSync("simple.stxn", rawSignedTxn.blob); // Submit the lsig signed transaction let tx = (await algodclient.sendRawTransaction(rawSignedTxn.blob)); console.log("Transaction : " + tx.txId);})().catch(e => { console.log(e);});TEAL Language SpecificationBrian Olson covers TEAL extensively in the Video attached earlier in this post.As stated above TEAL is an assembly-like language and is processed with a stack machine.The language is a non-turing-complete language that does not support looping but does support forward branches. TEAL programs are processed one line at a time that push and pop values from the stack. These stack values are either unsigned 64 bit integers or byte strings. TEAL provides a set of operators that operate on the values within the stack. TEAL also allows arguments to be passed into the program from a transaction, a scratch space to temporarily store values for use later in the program, access to grouped or single transaction properties, global values, a couple of pseudo operators, constants and some flow control functions like bnz for branching.TEAL Architecture OverviewGetting Transaction PropertiesThe primary purpose of a TEAL program is to return either true or false. When the program completes if there is a non-zero value on the stack then it will return true and if it has a zero value or the stack is empty it will return false. If the stack has more than one value currently it the program will also return false. So looking at the diagram above, the first couple of commands would be processed like:Program line number 1:Retrieving Transaction PropertiesNotice that we are using txnto reference the current transaction lists of properties. If we were using this program with a grouped transaction we would reference the group of transactions using gtxn. You would use global Group Sizeto get the number of transactions in the group. You could then use gtxn 0 Receiverto get the receiver of the first transaction.Pseudo OpcodesContinuing from the previous example.Program line number 2:Pseudo OpcodesHere we are using the addr pseudo opcode to convert a hardcoded address to a byte constant to put on the stack. See the TEAL Overview documentation for additional pseudo opcodes.OperationsTEAL provides many operators to work with data that is on the stack. See the TEAL Overview documentation for a full list of operators. Most operators act on the last two values on the stack. Some operators act on either one or more than two values from the stack. The TEAL Opcodes documentation explains the number of arguments and if anything is pushed back to the stack as a result of the operation.Program line number 3:OperatorsArgument PassingLater in the code we have a call to load the first argument on to the stack.Program line number 13:ParametersAll argument parameters to a TEAL program are byte arrays. The order you pass them in is also specific. In this case, we are loading the first parameter on to the stack. Most of the SDKs provide standard language functions that allow you to convert parameters to a byte array. If you are using the goal command line then the parameters must be passed as base64 encoded strings. So you will need to convert your parameters before passing them in. For example, if you wanted to pass “mystringargument” you could use a echo command like the following to convert to a base64 string for goal.$ echo -n mystringargument | base64Which will return the following result.bXlzdHJpbmdhcmd1bWVudA==This result can be used in conjunction with the — b64args parameter for the goal clerk sendcommand.goal clerk send -a 1000 -c fromaddr --to toaddr --from-program myteal.teal --argb64 "bXlzdHJpbmdhcmd1bWVudA==" -d ~/node/dataIf you are trying to pass an integer value of 123 in you could use a python command like the following to get the base64 encoded string. Note that currently, TEAL does not support negative numbers.$ python3 -c "import base64;print(base64.b64encode((123).to_bytes(8,'big')))"Which will output the following.'AAAAAAAAAHs='In SDKs you can use the native language functions. For example to pass in a string argument to the Python SDK you would use code similar to the example below.arg_str = "my string"arg1 = arg_str.encode()lsig = transaction.LogicSig(program, args=[arg1])For the Integer argument you would use (remember TEAL only supports positive values):arg1 = (123).to_bytes(8, 'big')lsig = transaction.LogicSig(program, args=[arg1])Storing and Loading from ScratchspaceTEAL provides a scratch space as a way of temporarily storing values for use later in your code. In the example below we first load 12 onto the stack and then duplicate it. Next, we multiply those two numbers which results in 144 being at the top of the stack. The store command is used to store this value in the scratch space 1 slot.Store a Value in Scratch SpaceLater we can retrieve this value using the load command. Note that this operation does not clear the scratch space slot. The value can be reloaded again, later in the program.Retrieve a Value from Scratch SpaceUsing the Lease ParameterOne other thing to be aware of the existence of the new transaction lease parameter. This parameter is very useful for preventing anyone from double submitting a transaction. This parameter is a 32-byte string that you create (goal expects it to be base64 encoded) which combined with the sender field makes the transaction unique. If anyone resubmits the transaction from the same sender and the same lease parameter it will be rejected, up until the last valid round for the transaction. Once the last valid round passes the old lease expires, and a new transaction with the same sender and lease can be sent again. You can access the lease parameter in TEAL by using the txn Leasecall.Operational Cost of TEAL OpcodesTEAL programs are limited to 1000 bytes in size. This is the size of the compiled program plus the arguments. In addition, in order to maintain speed, they are also limited by the opcode cost. This limit is set to 20000 for the entire program, where most opcodes cost 1 some cost more. For example to use the SHA256 function which gets the SHA256 value of the last value on the stack costs 7. Some opcodes are very expensive like using the ed25519verify function which costs 1900. The TEAL Opcodes page lists the cost of all opcodes.The TEAL Language Specification is fully described in the Transaction Execution Approval Language reference page and the full list of opcodes supported by TEAL are described in the TEAL Opcodes reference page.For a documented line by line example of a TEAL program see the ASC1 Escrow Example which covers how the stack is processed.What a teal program can not doTEAL while very powerful is limited by design in several areas. The reason for this is to continue to guarantee fast throughput on the Algorand network. While TEAL can analyze a transaction or group of transactions, it can not change a transaction. TEAL can not look up Algo or Algorand Standard Asset balances. TEAL can not look up information in previous blocks or transactions. TEAL does not know what round the current transaction will actually commit to the ledger, although it will know the round range. TEAL will also not know the time a transaction is committed. Also as stated earlier TEAL can not recurse and can only loop forward.GuidelinesBecause TEAL is very powerful, it requires that developers be very careful to test for certain constraints, like making sure to test that the transaction fee is not astronomical or verify that all required parameters are set. To see a list of guidelines as well as common tips and patters see the TEAL Overview page.Algorand Smart Contract TemplatesTEAL is a powerful language as it replaces signature authority on transactions. To help developers get started and to provide common functionality on using TEAL, Algorand is developing a set of TEAL templates that can be configured using a template approach. These templates are also going to be available with the individual SDKs. As of version 2.0 of Algorand we currently have 2 main templates. These are the Hash Time Lock Contract template and the Split Contract. As we develop more they will be added to this list on the developer site. If you want to follow along with the development or help with the project, take a look at the template location within the Algorand Github Repository. This directory contains the primary code for the templates and the docs directory contains a line by line description of the TEAL code and the use of these smart contracts.As part of each smart contract’s documentation, we provide an overview of the ASC and an SDK page on how to instantiate and use the template within code. For example, you can review the overview of the HTLC template here and see how it is used within each of the SDKs here.This list will continue to grow over time, so be sure to check back often.Understanding Algorand Smart Contracts was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 12. 10

Algorand Atomic Transfers

Figure 1 A conceptual overview of Algorand Atomic Transfers for developers.IntroductionAtomic Transfers are irreducible batch transactions that allow groups of transactions to be submitted at one time. See Figure 1 above for a conceptual overview. If any of the transactions fail, then all the transactions will fail. That is, an Atomic Transfer guarantees the simultaneous execution of multiple transfers of all kinds of assets. Detailed documentation about this feature is available on Algorand’s developer website here. If you are a database developer this is analogous to database transaction (it all works or none of it works).In this post we will draw out some of the most important concepts for developers who plan to work with Atomic Transfers. We will list some of the many examples of real-world assets that users can represent with this feature on the Algorand blockchain. Then we will share an example scenario paired with an interactive task to get you started with this new feature on TestNet.Steps to create Atomic TransfersCreate unsigned transactions and save them to a fileCombine these transactions in to one fileSign the grouped transactions with all the appropriate keys and submit themNote that goal and the SDKs include wrappers for these steps.Figure 2 Diagram shows the steps to create an Atomic Transfer.Figure 2 above shows the flow of an Atomic Transfer. See implementations in using the Go, Java, JavaScript and python SDKs here. You will find examples for creating group transactions and sending them to the network in each of the available SDKs. For information on installing Go, Java, JavaScript and Python SDKs see Using the SDKs and REST APIs.The example code at the above link is separated into snippets categorized by these core functions…Create the Transactions — This is like creating any kind of transaction in Algorand.Group the Transactions — This involves computing a groupID and assigning that id to each transaction.Sign the grouped transactions — Sign the grouped transactions with their respective private keys.Send the transactions to the network — Combine the transactions and send it to the net.Atomic Transfers Use CasesAtomic Transfers enables applications such as:Circular Trades — e.g. Alice pays Bob if and only if Bob pays Clare if and only if Clare pays Alice.Group Payments — e.g. Either everyone pays or no one does.Decentralized exchanges — e.g. Atomic multi-party transfers enable trades without trusted intermediaries .Internal units of accounting — e.g. Several companies can settle their accounts with each other with a single transaction.Payments — e.g. Payments can be made to multiple recipients.Interactive TaskGet started with Atomic Transfers click here. See the full task on our forums hereResourcesAtomic TransfersAtomic Transfers UsageAlgorand Atomic Transfers was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 12. 05

Algorand Standard Assets

A conceptual overview of Algorand Standard Assets for developers.IntroductionAn Algorand Standard Asset, ASA for short, is a layer 1 feature that allows users to represent any asset on the Algorand blockchain, in turn benefiting from the same level of security and ease of use as the native Algo. Detailed documentation about this feature is available on Algorand’s developer website here.In this post we will draw out some of the most important concepts for developers who plan to work with ASAs. We will list some of the many examples of real-world assets that users can represent with this feature on the Algorand blockchain. Then we will share an example scenario paired with an interactive task to get you started with this new feature on TestNet.ASA Important ConceptsASA Transaction Types and User FlowsThere are three new types of transactions on Algorand to support ASA-related functions, namely 1) AssetConfigTxn (‘acfg’), 2) AssetFreezeTxn (‘afrz’), and 3) AssetTransferTxn (‘axfer’). Those three types paired with different parameter specifications support seven primary user flows, namely: 1) Asset Creation, 2) Asset (re-)Configuration, 3) Asset Freezing, 4) Asset Destruction, 5) Asset Transfer, 6) Asset Revocation and 7) Asset Opt-In. Note that goal and the SDKs include wrappers for most of these user flows. See diagram below for the key differences between these user flows with respect to their underlying constructs.Diagram that shows primary ASA user flows with respect to their underlying transaction constructs.Asset Opt-InsTo receive a new type of asset, an account must opt-in, which is the equivalent of the account sending a 0-amount transfer of the desired asset from and to itself. This will create a holding in that user’s account for that new asset, which gives others who own that asset the ability to transfer it to this user.Minimum Balance RequirementEvery Algorand address that exists on the ledger, must have a minimum balance of 100,000 microAlgos. The addition of any new ASA holding increases that balance by 100,000 microAlgos. For example, if I opt-in to receive two different ASAs, my minimum balance will be 300,000 microAlgos (100,000 microAlgos x 2 ASAs + 100,000 microAlgos for the native Algo).Freeze AssetsUpon creation of an asset, you can specify a freeze address and a defaultfrozen state. If the defaultfrozen state is set to true the corresponding freeze address must issue unfreeze transactions, one per account, to allow trading of the asset to and from that account. This may be useful in situations that require holders of the asset to pass certain checks prior to ownership (e.g. KYC/AML). If the defaultfrozen state is set to false anyone would be allowed to trade the asset and the freeze address could issue freeze transactions to specific accounts to disallow trading of that asset. If you want to ensure to asset holders that the asset will never be frozen, set the defaultfrozen state to false and set the freeze address to null or an empty string in goal and the SDKs.Revoke AssetsThe clawback address, if specified, is able to revoke the asset from any account and place them in any other account that has previously opted-in. This may be useful in situations where a holder of the asset breaches some set of terms that you established for that asset. You could issue a freeze transaction to investigate, and if you determine that they can no longer own the asset, you could revoke the assets. Similar to freezing, if you would rather ensure to asset holders that you will never have the ability to revoke assets, set the clawback address to null.ASA Use CasesWith Algorand Standard Assets you can represent fungible and non-fungible assets and with varying degrees of control. Here is a small subset of what could be represented on layer 1 of the Algorand blockchain with ASAs:Loyalty Points— e.g. Airline points that can be traded in for seat upgrades, tickets, or merchandise.In-game points — e.g. Buy badges and other in-game assets.System/store credits — e.g. Provide credits to your customers that can be redeemed in-store.Supply Chain — e.g. Track food items, like bananas, through the supply chain to the consumer.Tickets Sales— e.g. Issue tickets of the same type and price for entry into an event, issue tickets to a basketball game where each ticket may have a different value.Cryptocurrencies — e.g. stable coins, fiat currency.Real Estate — e.g. Generate and issue shares of a building, represent ownership of a home.Certification — e.g. KYC-certified account, non-GMO certified account.Interactive TaskGet started with Algorand Standard Assets, by opting-in to receive an ASA we created on the Algorand TestNet called Algorand Developer Coins. See the full task on our forums here.ResourcesAlgorand Standard Asset (ASA)ASA SDK UsageAlgorand Standard Assets was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 11. 27

SDKs are available for BetaNet

Last week we announced the release of our new BetaNet, which has new features we are working on. While this was very significant, most of the new features were only available with Algorand’s command-line tool, Goal. In the intervening time, our Engineering team has been working diligently to fully support all the new features with our SDKs, which are available in Go, Java, JavaScript, and Python. These SDKs are now in a state where they can be used and tested. Additionally, we now have Developer documentation on the new BetaNet features that will help you to understand the new features and to get you up and running with your preferred SDK!So what features are currently available in BetaNet?BetaNet contains three new main features to support many application types and workflows. These are Algorand Standard Assets (ASA), Atomic Transfers, and Algorand Smart Contracts Layer-1 (ASC1). These features are described below with links to appropriate documentation and SDK pages. Standard AssetsGenerally, Blockchains have native tokens or cryptocurrency that underpin the operation of the network. Ours is the Algo. These are native to the protocol and operate at high efficiency, extreme security, and significant throughput. Many blockchains allow other tokens or assets to be created and used on their networks but this generally requires additional code or for the asset to be moved to Layer-2. Additionally, these bolt-on tokens/assets generally do not have the throughput, efficiency or security of a true Layer-1 token or asset.Algorands’ new Standard Assets feature allows anyone to create a Layer-1 token or asset on the Algorand network. These newly created assets inherit all the same features, security, and performance of our primary token (the Algo). This includes things like near-instantaneous transaction finality (less than 5 seconds currently), fast block creation time and minuscule transaction fees.Algorand Standard Assets are also extremely configurable, allowing users to represent virtually any asset on the blockchain. This includes Fungible assets like loyalty points, new currencies, and stable coins. You can also create Non-Fungible assets like real estate, collectibles or in-game assets. Each asset can also be configured to support regulatory operation including freezing and revoking assets, which allows creating regulated assets like securities.If you want to learn more about developer support for creating assets see our Algorand Standard Asset Documentation, which walks through using our command-line tool, Goal, to create and manage assets. Additionally, we now have documentation on how to create and manage assets with any of our SDKs.Atomic TransfersTransactions are the primary unit of operation on a blockchain. When we buy or sell things online these generally involve at least two transactions. One party may send funds to purchase “something”, and once received the seller sends the “something”. On a blockchain, this typically involves at least two transactions. This presents a problem where there is no guarantee that after the buyer makes his or her purchase, the seller will execute the second transaction. To get around this many blockchains use smart contracts. This can be inefficient and error-prone.Algorand is now providing Atomic Transfers to solve this problem. As with all the features described in this post, atomic transfer functions on layer-1 as part of the protocol. Algorand’s Atomic Transfers allow many transactions to be grouped into one operation. If any of the transactions fail for any reason, none of the transactions are processed. This allows a group of transactions to be first grouped and then signed by all parties and submitted as one operation.Atomic Transfers can also be used in conjunction with any asset (ASA or Algo) represented on the Algorand chain. As with ASA’s these atomic transfers have all the advantages of being a layer-1 feature.If you want to learn more about developer support for atomic transfers see our Atomic Transfers documentation, which walks through using our command-line tool, Goal, to group and submit transactions in an atomic operation. Additionally, we now have documentation on how to perform atomic transfers with any of our SDKs.Algorand Smart Contracts Layer-1 (ASC1)Smart contracts, in general, were created to automatically process transactions when a given set of logic or encoded terms were completed. These were intended to function without third party oversight and with higher efficiency than non-blockchain methodologies. In general, they live up to their designed goals. That said, smart contracts provide many disadvantages in blockchains, most of which center around security issues and performance impacts.Algorand has taken a different approach by implementing a new language called Transaction Execution Approval Language (TEAL) and baked it into the protocol. This approach designated as Algorand Smart Contracts Layer-1 (ASC1) provides a layer-1 solution to smart contracts. These contracts automatically enforce custom rules and logic, typically around how assets (Algorand Standard Assets or Algos) can be transferred. These contracts provide layer-1 solutions for problems like crowdfunding algorithms, split transactions, periodic payments, collateralized debt, escrows and more.As with ASA’s these smart contracts function on layer-1 and enjoy all the same benefits of the standard Algorand token, including speed, low transaction fees, and security.In addition to providing the ability for custom ASC1 contracts to be written, Algorand is providing ASC1 templates and SDK wrapper support for common use case scenarios like limit orders, periodic payments and delegated key registration. More information on our Template sets will be available soon on our developer site.ASC1 contracts function in two basic flows; as a contract account or as a signature delegation. Contract accounts are created when a TEAL program is compiled. These are just standard Algorand accounts with the caveat that no asset (ASA or Algo) can leave this account without the logic within the contract evaluating to true during the transaction. Assets can be passed to the contract account as with any normal Algorand account. With signature delegation the ASC1 functions as a replacement for the signing key in a transaction. After the ASC1 is compiled it must be signed by the user delegating his or her authority. These can be used to give access to your account if the given logic evaluates to true during a transaction. For example, you may want to give your power company the ability to remove a limited amount of Algos from your account once a month.To get more information see the ASC1 documentation page. In our developer documentation, both types of ASC1 flows are represented in the examples. You can also look at a simple example of an ASC1 and how it is processed with an escrow account. If you are interested in the Goal commands that work with ASC1 see the ASC1 Tutorial. To get more reference information on the language, see the TEAL reference documentation.ConclusionWhile individually each of these three new features is quite exciting, what is even more powerful is the fact that they were all designed to work together. For example, stand assets can be grouped in atomic transfers. Algorand smart contracts can be used with both standard assets or atomic transfers. We believe this will offer flexibility to build some very complex applications. We are looking forward to seeing what the Algorand community builds!SDKs are available for BetaNet was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 11. 15

First Release of BLS Library

BLS signatures, introduced by Boneh, Lynn, and Shacham in 2001, enable efficient compression of a group of signatures S_1, …, S_n into a compact signature S that can be used to authenticate the entire group. These signatures are known to improve bandwidth, storage, and verification speed (when all signatures are on the same message) in numerous applications. When applied to blockchains, multiple signatures of transactions in a block can be compressed into a single signature, creating smaller blocks. Smaller blocks result in lower storage, network, and compute requirements needed from the network participants.BLS signatures have been around for some time, but as we know from experience, the adoption of new cryptographic schemes takes time. To accelerate the adoption of BLS signatures, our cryptography team, together with colleagues from academia, put together an Internet Draft. We hope the standard will accelerate this technology and help independent teams write cross-compatible implementations.draft-irtf-cfrg-bls-signature-00 - draft-irtf-cfrg-bls-signature-00.txtThe standard has evolved significantly since our initial draft posted in February 2019. It has now been adopted by the Crypto Forum Research Group (CFRG), which focuses on cryptography standardization for the Internet Engineering Task Force (IETF). We will continue updating the standard based on received feedback and hope it will be finalized and published as an RFC soon.Today, we are excited to announce the first release of the reference implementation for the BLS signature! implementation is compatible with the latest version of the standard and includes test vectors for comparison. We thank NCC’s Cryptography Services group for auditing the code.It is exciting to see how the community is already planning to use BLS signatures, and we look forward to its real-world deployments.“At Cloudflare, BLS signatures allowed us to join forces with multiple randomness providers to bring users the League of Entropy, a quorum of decentralized randomness beacons. We are enthusiastic about the results derived from the BLS standardization effort for strengthening the security of this and other services Cloudflare provides.”, Armando Faz, Cryptographic Engineer at Cloudflare inc.“We are excited to see this progress towards BLS standardization. BLS signatures, being aggregatable, can be useful when resources like bandwidth and storage capacity are limited. Uniqueness and determinism of BLS can help improve security in blockchains and other fields. BLS standardization will enable broader real-world use of these innovations.”, Calibra ResearchWe thank Justin Drake (Ethereum) for inviting broader blockchain and cryptography communities to follow this standardization effort and everyone who provided valuable feedback.I would like to congratulate Riad Wahby and Zhenfei Zhang on this release. This is a significant step towards BLS adoption!First Release of BLS Library was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 11. 15

Algorand BetaNet is now live

In an effort to give the developer community access to the newest features and to allow plenty of maturation time for these new features to be fully tested, Algorand is announcing the release of BetaNet! BetaNet is an additional network that is wholly different than our MainNet or TestNet networks.Algorand’s BetaNet will contain many new features that the development team is currently working on and that are slated to eventually be deployed to our TestNet and MainNet environments. The intent is for this network to be updated often and will help us to refine new features and provide functionality that developers need in order to build successful projects. TestNet will continue to mirror MainNet’s protocol version so that developers can count on it as a staging environment for their own applications before deploying to MainNet. new BetaNet also contains a faucet that is located here.The Algorand Developer Site contains new documentation addressed to BetaNet users. This documentation is available on the BetaNet side menu and will reflect new features as they stand currently. These documents will be updated regularly and when the features are uplifted into TestNet and MainNet, the documentation will move accordingly.BetaNet can be accessed by updating your binaries using the update script as described here. After you have new binaries the process is very similar to switching to either TestNet or MainNet by swapping the genesis config file. Additionally, the new binaries can be used to start a private network as well. This allows you to create a new private network using the BetaNet binaries without having to build from source. After you have tested the new features with a private network you can then try on the worldwide BetaNet, or if you prefer to just use BetaNet you can do that from the start. As a quick start to test out on a private network you can do the following:Stop and update node for BetaNet Binaries:# If you have not installed any node # download the installer into a directory like ~/inst# which is covered on every OS install page # ie in the Retrieve Installation Package section.# Update software with beta flag and specify betanet directory../ -i -c beta -p ~/node -d ~/node/betanetdata -n# Next switch the ~/node directory and update goalcd ~/node./ -i -c beta -p . -d betanetdata -n# If you have a node already installed# change to the directory containing your running nodecd ~/node# Stop the current node./goal node stop -d data# Update software with beta flag and specify betanet directory../ -i -c beta -p . -d betanetdata -n# Run the update script a second time to update goal./ -i -c beta -p . -d betanetdata -nYou now have the BetaNet binaries in your ~/node directory. Note that this approach will not work with our standard Ubuntu install as that is configured to automatically start and the binary files are located in the /usr/bin directory. The data directory for the Ubuntu install also uses /var/lib/algorand as the data directory. So if you are on a Ubuntu system you may want to use the install guide for other Linux distributions if you want to try out BetaNet.You will need to do some additional configuration if you want to start up BetaNet at this point. These steps are described in the getting started with BetaNet page.To start up a private network with the BetaNet binaries you will need to supply a network template similar to the template described here. Once you have created this template, you will need to supply the ConsensusProtocol parameter and set it to future as shown below.{ "Genesis": { "NetworkName": "", "ConsensusProtocol": "future", "Wallets": [ { "Name": "Wallet1", "Stake": 50, "Online": true }, { "Name": "Wallet2", "Stake": 50, "Online": true } ] }, "Nodes": [ { "Name": "Primary", "IsRelay": true, "Wallets": [ { "Name": "Wallet1", "ParticipationOnly": false } ] }, { "Name": "Node", "Wallets": [ { "Name": "Wallet2", "ParticipationOnly": false } ] } ]}You should be able to start the private network with the following command:# create the network in the test network./goal network create -n mynetworkwithbeta -t networktemplate.json -r test# start the network./goal network start -r test# check the status of the network./goal network status -r testThis will create a test directory with your nodes started.To stop the network run:# stop the network./goal network stop -r test# delete the network./goal network delete -r testMore information on private networks is available here.Our community forums also have a new category page for BetaNet discussions. This page will also have quick links to descriptions of all new features. As you test these new features out be sure to reach out to us on this new community page!Algorand BetaNet is now live was originally published in Algorand on Medium, where people are continuing the conversation by highlighting and responding to this story.


19. 11. 05

Transaction History

Preparing to be listed on cryptocurrency exchanges
Please leave a message of support for the team

go to leave a message

Security verification

There is security verification of the project
Why security verification is necessary?

Read more


* Written questions can not be edited.

* The questions will be answered directly by the token team.

Platform ERC20
Hard cap -
Audit -
Stage -
Location -