consensus and smart contract development

Ultrain Launches Enterprise Mainnet Monitoring & Round Two of Testnet Participant Selection
R

Dear Ultrain community members,

We are excited to announce the launch of Ultrain’s mainnet monitoring page! Click the following link to see the operational status of our permitted mainnet including mining profitability, real-time consensus visualization, and existing mainnet users: https://www.ultrain.io/miner-registration

The addition of this visibility feature will further explain Ultrain’s consensus procedure and business model. Please visit the Mainnet Monitoring service (link provided above) and read the supporting article at https://medium.com/ultrain-chain/introduction-to-ultrains-economic-model-74920e1c687f. These resources assist us to comprehend Ultrain’s token economic system, and understand how Ultrain’s model is based on a notion of servicing and empowering the fundamentals of the real economy.

Ultrain business development model is dependable and scalable; as the demand for blockchain services increases, Ultrain’s economic system will grow accordingly to meet the interests of early adopters, as well as ensure the healthy development of the entire business ecosystem.

Since the call went out for Ultrain’s second round of testnet miner recruitment, we received many applications from all over the world. Thank you all once again for the great interest!
The following is the list of successful applicants – welcome to the Ultrain testnet family and enjoy your preview of Ultrain’s technology.

1、[email protected]
2、[email protected]
3、[email protected]
4、[email protected]
5、[email protected]
6、[email protected]
7、[email protected]
8、[email protected]
9、[email protected]
10、[email protected]
11、[email protected]
12、[email protected]

(The list below represents the selected miners since December 26 2018 to January 13,2019)

Ultrain encourages everyone to continue submitting testnet applications, and stay tuned for more updates from the team!

Thank you all for your continued support of Ultrain.

Ultrain Team
2019. January 25th

read more

hacker marathon and regular meetup or online game

Ultrain Super Star DApp Contest Reveals Top Three Projects
B

Ultrain, together with Mars Finance, launched the first offline event for the Super Star Dapp Contest in Beijing on August 10. The event attracted 15 teams of developers, with each of them introduced the technical highlights of their projects and DApp usage scenarios.

As the world’s leading business chain, Ultrain has long been committed to the construction of a complete ecological community. Only with the combination of underlying technological infrastructure and ecological applications, and the resonation of developers and users, will the industry break down the walls and burst out with power that everyone can truly feel. Good developers are the cornerstone of the block chain world. In the context of the above, Ultrain and Mars Finance jointly organized the Super Star Dapp Contest, to provide better presentation opportunities and more support for outstanding developers. In just a few weeks, the contest has brought together top geeks from all over the country.

Emma Liao, co-founder of Ultrain

The offline event is reviewed by Zhao Lei, director of Huobi Lab Incubator, He Huan, founder of Nanshan Accelerator, Kyle Lu, founder of dapp.com, Cai Minghui, founder of DAPPX, as well as Guo Rui, Emma Liao and Li Ning, co-founders of Ultrain. The jury made a comprehensive evaluation of the technical, product, commercial and other strengths of the teams’ work, and eventually picked out the top three winning teams. Their products are: a tool called ChainIDE, a game called crypto Three Kingdoms, and a pet rescue platform called Where The Dogs Go x Wandering Baby.

According to Wu Xiao, founder of ChainIDE, this tool is the world’s first multi-chain smart contract Integrated Development Environment (IDE), a product designed for agile development, able to help developers optimize the initial design environment process immediately, thereby saving costs. The tool has been successfully used in Libra, the first IDE to connect to Facebook Libra Move.

Wu Xiao, founder of ChainIDE

The second prize goes to crypto Three Kingdoms, a game developed overseas. Shi Pu, the founder, made a special trip back to Beijing from New York, working overtime for three days, just to show the best at the contest. As a game with the whole assets on chain, it is also a real game of non-gambling RPG. In this game, players aim to earn rare props and the Three Kingdom tokens by fighting NPC or other players, to upgrade their heroes and the equipment, meanwhile receiving dividends through a systematic mechanism.


Shi Pu, founder of crypto Three Kingdoms


The jury

The third award-winning project is the Wandering Baby, launched by Li Chen. It is a donation platform designed for stray dogs. With the help of the block chain’s openness and transparency, the identity of stray dogs and the relationship with their guardians are verified, and donations are recorded on chain as tokens. The entry and consumption records of each dog’s accounts are tracked in real time. While tokens are used to convert the donation money, and a certain amount of them are deducted as the operating expenses for the sustainable development of the platform. Where The Dogs Go has gained millions of monthly active users and five offline sites to divert to the Wandering Baby.
In addition, “Love on Chain” ,“Meal Introduction”, “Fanclub“ won the innovation award, the special award and the encouragement award respectively. Ultrain has given a huge bonus to the winning projects and will also guarantee all-round support in the future.


Li Chen, founder of the Wandering Baby


Left: CEO Guo Rui, co-founder of Ultrain;Right: Wu Xiao, founder of ChainIDE


Left: Shi Pu, founder of the crypto Three Kingdoms;Right: Emma Liao, co-founder of Ultrain


Left: CTO Li Ning, co-founder of Ultrain;Right: Li Chen, founder of the Wandering Baby

“The original aim of the Superstar Project is to gather a group of like-minded developers to build quality applications,” said Li Ning, CTO and co-founder of Ultrain. “Each contest is a brand-new start. We call on more people to all in block chain technology and make unremitting efforts to jointly establish a sustainable ecosystem.”

We believe that the three teams selected by the professional jury are high-quality projects with real sustainable operational capacity, willingness and rigid application value. With the continuous expansion of the block chain influence, and the continuous precipitation and development of technology, more and more top Dapps like this will cut a figure, and gradually develop into flagships of the industry. Ultrain will also continue to work with the media, developers’ communities, investment institutions and exchanges and other peers to further strengthen the landing of block chain technology and build a huge sustainable ecosystem.

read more

Industry dynamics and latest news about blockchain and currency

Ultrain Bi-Weekly Report(07.29–08.11)
B

Following is the biweekly report on the progress of the project from July 29th — August 11th, which contains two items: project development progress and community dynamic update. It is for the community members to check. Thank you for your attention.

Technology Update from Ultrain (7/29–8/11)

Ultrain’s Core Technology

UDP protocol application layer encapsulation completes development and enters the test joint debugging phase;

Continuously optimize the consensus agreement, discard expired messages, increase the node status auxiliary judgment mechanism, etc.;

Complete the black and white list operation control function to achieve specific account, contract, and operation fine control;

Upgrade and optimize the operation rate on the chain to achieve Dynamic and flexible setting;

Improve the preparation of the UGAS mapping of the main net and publish the mapping operation guide.

Ultrain’s Ecosystem

Australia traceable side chain Meisi Manor wine DAPP access dynamic map function, real-time display query frequency;

Digital asset issuance platform to complete UIP06 and UIP09 Ledger framework access work;

Binance DEX achieves BEP2 and ERC20 Token two-way conversion. Complete the open source preparation work.

Ultrain Developer Kit

U3.js is upgraded to 0.3.16, adding a transaction fee query interface;

Refactor the internal implementation of getAccoutsByKey method, optimize from node memory query to mongodb query;

UltrainOne upgrade to V2.3, mainly for performance optimization, including adding default loading image, loading effect and partial page loading time; The scene is flashed back; and the decision interface of UltrainOne is added to the Webview.

Ultrain’s Latest Community & Event Update

Ultrain officially starts the main net mapping!

Ultrain officially started the main net mapping on August 7. We offer a total of three kinds of mapping ways for community members to choose and operate, the specific operating instructions and precautions on the map,be sure to open the official website link (https://ultrain.io/mapping) to view . All users should complete their personal operation by August 30th , after that Ultrain will automatically complete the mapping on the main net. Thank you for your strong support for Ultrain, I hope everyone can successfully complete the main network mapping work!

Ultrain and Shanghai University of Finance and Economics’s Financial Science and Technology Research Institute reached scientific research cooperation

On August 9th, Ultrain officially announced that we established a strategic partnership with the Shanghai University of Finance and Economics, and has integrated our advantageous resources in their respective fields to promote the application landing of blockchain technology. And we signed a cooperation agreement already! Since then, we will cooperate in the direction of blockchain experiment support and curriculum co-construction, key technology research in blockchain, joint research and development, training support and resource sharing in the field of blockchain. Ultrain will open its public testing network for use in teaching and research experiments for Shanghai University of Finance and Economics, jointly develop virtual chain simulation-related experimental teaching projects and courses based on Ultrain, and bring the resources of both sides to conduct course training. Joint research on key technologies such as consensus game and zero-knowledge proof in the field of blockchain. On the Dapp landing, we will also share research results in the fields of finance, medical care, and public utilities. In addition, as a cooperative enterprise of the Shanghai University of Finance and Economics, the Institute of Financial Science and Technology, Ultrain will participate in the construction of its international laboratory in the Belt and Road.

The first phase of the Superstar program was perfect end, and the first three teams were finally announced.

At 2 pm on August 10, Ultrain and Mars Finance held the first offline selection of the “Superstar Program” DApp Developer Contest in Beijing. 15 top developers teams unveiled together to showcase their projects’ technical highlights and DApp. Complete for winner and full of crowd.

The three winning teams are: the tool category ChainIDE, the game project encryption three countries, the pet rescue platform dog to go x stray baby. ChainIDE founder Xiao Wu introduced that ChainIDE, as a tool project, is the world’s first multi-chain smart contract integration environment (IDE). The product design concept is designed for agile development and can quickly help developers optimize the process of initial construction for the design environment to save costs. This tool has been successfully used in Libra. It is the first IDE to access Facebook Libra Move.

The second winner of the competition is encrypted three countries which is a game project. The team is from overseas. The founder Pu Shi made a special trip from New York to Beijing to work overtime for three days to show the best performance in the contest. Everything in the game is on chain and it’s a non-gambling RPG game with real gameplay . In this game, the player’s goal is to compete with NPC or other players, earn rare props and coins, to enhance their heroes and equipment, and earn dividends through the system’s dividend mechanism;

The third winner is The stray baby, the founder is Chen Li. It is a lovely donation platform specially designed for stray dogs . With the open transparency of the blockchain, the relationship between the stray dog identity and the guardian are checked, and the donation is recorded in the form of token. Each wandering can be tracked in real time. The account and the consumption record of the dog account, which use the token to convert the donation amount, and deduct a certain proportion of the token as the operating cost of the platform to ensure the sustainable development of the product. ”Where the dog went” already has millions of monthly users and five offline sites to help the stray baby.

Ultrain goddess Emma was invited to Shanghai “2019 blockchain application landing” event

On August 11th , our goddess Emma went to Shanghai to participate in the “2019 blockchain application landing: education and games ” event, with Jadworks founder Richard Maaghul , game currency comparator CEO/ continuous entrepreneur /WOG eco founder Liu Nengqi Together to bring you a wonderful speech. Most of the elites at home and abroad, Emma introduced the technical advantages of Ultrain , and also conducted a profound exchange discussion with the blockchain industry.

Ultrain Co-Founder & CEO Rui Guo and the chief architect Yufeng Shen participate in the Baihua blockchain “cross-chain, let value flow freely” activity

On August 11th, our co-founder & CEO Rui Guo explained his insights of the industry in the “cross-chain, free value circulation” at the Baihua blockchain activity. The chief architect Yufeng Shen also had a discussion about cross-chaining in the round table forum.

Great progress in the Korean community recently

Ultrain has been continuing its operations in the Korean community. Recently, the Korean community has been very popular. The number of Korean Kakao group has reached 950, and the number of Telegram group has reached 350. The Ultrain articles have caused a lot of discussion in South Korea, and the number of views has continued to increase, reaching 11,000+! (https://coinpan.com/). The Ultrain Korean team promotes the UltrainOne APP downloading by launching an event in the Korean local community and expects to increase the downloading volume to 1000 in the near future!

The above is the progress report of Ultrain from July 29th to Aug 11th, looking forward to more exciting contents after that!

read more

Dapp develop tools and high-quality application recommendations

How to build an end-to-end DApp on Ultrain - 2
R

Step2:Write DApp

There are two Dapps to be written, one is MiningDapp, the other is UDapp. We use the Javascript SDK U3.js to write the DApps. To be simple, we create the two DApps in one project.

Written by DApp

In WebStorm, create a new project -> Node.js Express App-> Template select Pug (Jade); modify the project name to CarbonDApp;

Click ‘Create’ to create a project

Import project dependent class library

Copy all the directories in node_modules in CarbonProject to the node_modules directory of CarbonDApp, and repeat the directory skipping without copying;
Copy the CarbonDApp/node_modules/u3.js/dist/u3.js file to the CarbonDApp/public/javascripts directory.

Modify the DApp server port

Since the default 3000 port is already occupied, you need to modify the server port of the DApp.

Open the bin/www file and find var port = normalizePort(process.env.PORT || '3000'); change 3000 to 3001

Create an account information browsing page

Create an index.html page in the public directory and add the following code to the page:

<html> <head> <meta charset="UTF-8"> <title>test</title> <link rel="stylesheet" href="/stylesheets/style.css"> <script src="./javascripts/u3.js"></script> <script> let u3 = U3.createU3({ httpEndpoint: 'http://127.0.0.1:8888', httpEndpoint_history: 'http://127.0.0.1:3000', broadcast: true, debug: false, sign: true, logger: { log: console.log, error: console.error, debug: console.log }, chainId:'2616bfbc21e11d60d10cb798f00893c2befba10e2338b7277bb3865d2e658f58', symbol: 'UGAS' }); async function getBalanceInfo() { let SYMBOL = 'CARB'; let account = 'ben'; const ben_balance = await u3.getCurrencyBalance({ code:'ben', symbol: SYMBOL, account: account }); document.getElementById("carbon_balance").innerHTML = '账户余额:'+ben_balance; const bob_balance = await u3.getCurrencyBalance({ code:'ben', symbol: SYMBOL, account: 'bob' }); document.getElementById("bob_balance").innerHTML = '账户余额:'+ bob_balance; const tom_balance = await u3.getCurrencyBalance({ code:'ben', symbol: SYMBOL, account: 'tom' }); document.getElementById("tom_balance").innerHTML = '账户余额:'+tom_balance; const tony_balance = await u3.getCurrencyBalance({ code:'ben', symbol: SYMBOL, account: 'tony' }); document.getElementById("tony_balance").innerHTML = '账户余额:'+tom_balance; const jerry_balance = await u3.getCurrencyBalance({ code:'ben', symbol: SYMBOL, account: 'jerry' }); document.getElementById("jerry_balance").innerHTML = '账户余额:'+tom_balance; const jack_balance = await u3.getCurrencyBalance({ code:'ben', symbol: SYMBOL, account: 'jack' }); document.getElementById("jack_balance").innerHTML = '账户余额:'+tom_balance; } getBalanceInfo(); //transfer(); </script> </head> <body> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>CarbonCoin发行方</h1> <p>账户:ben</p> <p>描述:进行CarbonCoin发行的发行方,持有所有未分配的CarbonCoin</p> <p id="carbon_balance"></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>节能设备1</h1> <p>账户:bob</p> <p>描述:通过节能产生CarbonCoin的节能设备1</p> <p id="bob_balance"></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>节能设备2</h1> <p>账户:tom</p> <p>描述:通过节能产生CarbonCoin的节能设备2</p> <p id="tom_balance"></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>航空公司C</h1> <p>账户:tony</p> <p>描述:大型航空公司,化石能源使用大户</p> <p id="tony_balance"></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>汽车制造商D</h1> <p>账户:jerry</p> <p>描述:大型汽车制造商,化石能源使用大户</p> <p id="jerry_balance"></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>CarbonCoin销毁账户</h1> <p>账户:jack</p> <p>描述:用于CarbonCoin销毁的账户,持有所有销毁的CarbonCoin</p> <p id="jack_balance"></p> </div> </body> </html> Start the DApp service, test the page
In the npm interface, double click the start button

After the server is successfully started, visit http://127.0.0.1:3001/index.html and the following page appears:

It can be seen that the issuer ben account holds 10 million of all CARB Tokens issued; other accounts have not yet held CARB Token;

Create a mining.html page

Mining.html page, energy-saving device 1 and energy-saving device 2 send the calorie value generated in the first 30 seconds to the energy smart contract every 30 seconds, and redeem CarbonCoin;

Create a mining.html page in the public directory, enter the following code:

<html> <head> <meta charset="UTF-8"> <title>test</title> <link rel="stylesheet" href="/stylesheets/style.css"> <script src="./javascripts/u3.js"></script> <script> let u3_bob = U3.createU3({ httpEndpoint: 'http://127.0.0.1:8888', httpEndpoint_history: 'http://127.0.0.1:3000', broadcast: true, debug: false, sign: true, logger: { log: console.log, error: console.error, debug: console.log }, chainId:'2616bfbc21e11d60d10cb798f00893c2befba10e2338b7277bb3865d2e658f58', keyProvider: '5JoQtsKQuH8hC9MyvfJAqo6qmKLm8ePYNucs7tPu2YxG12trzBt',//bob's private_key symbol: 'CARB' }); let u3_tom = U3.createU3({ httpEndpoint: 'http://127.0.0.1:8888', httpEndpoint_history: 'http://127.0.0.1:3000', broadcast: true, debug: false, sign: true, logger: { log: console.log, error: console.error, debug: console.log }, chainId:'2616bfbc21e11d60d10cb798f00893c2befba10e2338b7277bb3865d2e658f58', keyProvider: '5KXYYEWSFRWfNVrMPaVcxiRTjD9PzHjBSzxhA9MeQKHPMxWP8kU',//tom's private_key symbol: 'CARB' }); function wait(ms = 0) { return new Promise(res => setTimeout(res, ms)); } function randomFrom(lowerValue,upperValue) { return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue); } async function mining() { let owner_account = 'ben'; const tr_bob = await u3_bob.contract(owner_account); const tr_tom = await u3_tom.contract(owner_account); // let amount = U3.format.UDecimalPad(2000,4); let heat_bob = randomFrom(15000,20000); let heat_tom = randomFrom(15000,20000); await tr_bob.recordHeat(heat_bob,{ authorization: [`[email protected]`] }); await tr_tom.recordHeat(heat_tom,{ authorization: [`[email protected]`] }); var d=new Date(); var t=d.toLocaleTimeString(); document.getElementById("bob_log").innerHTML = 'time :'+t+', heat value :'+ heat_bob; document.getElementById("tom_log").innerHTML = 'time :'+t+', heat value :'+ heat_tom; } mining(); var int=self.setInterval("mining()",30*1000); </script> </head> <body> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>节能设备1</h1> <p>账户:bob</p> <p>描述:通过节能产生CarbonCoin的节能设备1</p> <p id="bob_log"></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>节能设备2</h1> <p>账户:tom</p> <p>描述:通过节能产生CarbonCoin的节能设备2</p> <p id="tom_log"></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <button onclick="int=window.clearInterval(int)">stop</button> </div> </body> </html>

Go to http://127.0.0.1:3001/mining.html and the following page appears:

There are two things to note here.

When sending data to the energy smart contract, you need to hold the private key of the account before you can sign and send it. In order to simplify the programming, the private key is directly written to the webpage. In the actual program, the private key needs to be protected and hidden.

To simplify the writing, the Bob and tom DApp programs are written directly to a page. Actually, they should be two DApp program instances, which are running on two devices respectively.

Now our energy-saving equipment can already send data to the smart contract, and after the energy smart contract receives the data, it will pass the data to the operator server, and the operator server will call the energy smart contract again to exchange carboncoin. So we need to establish EnergyServer;

Step3: EnergyServer

Establish event monitor and handle events

In this section, we will deal with the above calorific value data upload event.

1.1 Establish listener event server code

In the bin directory of the CarbonDApp project, create a new file msgBroker.js and enter the following code.

const { createU3 , format} = require('u3.js/src'); const http = require('http'); const port = 3002; let u3 = createU3({ httpEndpoint: 'http://127.0.0.1:8888', httpEndpoint_history: 'http://127.0.0.1:3000', broadcast: true, debug: false, sign: true, logger: { log: console.log, error: console.error, debug: console.log }, chainId:'2616bfbc21e11d60d10cb798f00893c2befba10e2338b7277bb3865d2e658f58', keyProvider:'5JbedY3jGfNK7HcLXcqGqSYrmX2n8wQWqZAuq6K7Gcf4Dj62UfL',//ben's private key symbol: 'UGAS' }); let server = http.createServer((request, response) => { const { headers, method, url } = request; console.log(method); console.log(url); let body = []; request.on('error', (err) => { console.error(err); }).on('data', (chunk) => { body.push(chunk); }).on('end', () => { body = Buffer.concat(body).toString(); console.log("received msg:", body); if (body != null && body.trim()!="") { var obj = JSON.parse(body); let heatValue = JSON.parse(obj[1]).heat.split(",")[0]; let account = JSON.parse(obj[1]).heat.split(",")[1]; exchangeCarbonCoin(account,heatValue); } response.on('error', (err) => { console.error(err); }); response.statusCode = 200; response.setHeader('Content-Type', 'application/json'); response.write("ok"); response.end(); }); }); server.keepAliveTimeout = 0; server.timeout = 0; server.listen(port, function () { console.log((new Date()) + " Server is listening on port " + port); }); function wait(ms = 0) { return new Promise(res => setTimeout(res, ms)); } async function exchangeCarbonCoin(account,heat) { let SYMBOL = 'CARB'; let code = 'ben'; const tr = await u3.contract(code); let heatValue = format.DecimalPad(heat,4); const result = await tr.exchangeCarbonCoin('ben', account, heatValue+' ' + SYMBOL, 'test', { authorization: [`[email protected]`] }); let tx = await u3.getTxByTxId(result.transaction_id); while (!tx.irreversible) { await wait(1000); tx = await u3.getTxByTxId(result.transaction_id); if (tx.irreversible) { console.log(tx); break; } } }

The code establishes a service on port 3002. After the energy-saving device uploads its calorific value, the smart contract will send the energy-saving device to the service to upload the calorific value data. The service calls the exchangeCarbonCoin method of the energy smart contract to exchange the CarbonCoin.

1.2 Establish a listener event server startup script

Open the CarbonDApp/package.json file and add the following code to the scripts property: "event": "node ./bin/msgBroker"

1.3 Start the listening server

Refresh the npm window with the ‘event’ option

Double-click event to complete server startup

1.4 Register event monitoring mechanism on the chain

Query the internal network address of the machine through the ifconfig command, for example: 10.20.8.32

In the CarbonProject/test directory, create the registerEvent.js file; enter the following code in the file

const U3Utils = require('u3-utils/dist/es5'); const { createU3, format, listener } = require('u3.js/src'); const config = require('../config'); const chai = require('chai'); require('chai') .use(require('chai-as-promised')) .should(); const should = chai.should(); const expect = chai.expect; const assert = chai.assert; describe('Test cases', function() { it('event register', async () => { let account = 'ben'; const u3 = createU3(config); await u3.registerEvent(account, 'http:// 10.20.8.32:3002'); U3Utils.wait(1000); }); it('event unregister', async () => { let account = 'ben'; const u3 = createU3(config); await u3.unregisterEvent(account, ' http:// 10.20.8.32:3002'); U3Utils.wait(1000); }); });

Note that the registered address is modified to be the internal network address of the machine, and 127.0.0.1 cannot be used.
Run the event register test case to complete the event registration;

1.5 Test calorie value for CarbonCoin function

Visit http://127.0.0.1:3001/mining.html page, every 30 seconds, both bob and tom will randomly send a random value between 15000 and 20000 as the calorific value to convert the smart contract to CarbonCoin;
Visit and refresh the http://127.0.0.1:3001/index.html page, you can find that the CarbonCoin account of bob and tom is increasing every 30 seconds;

Step4:Improve DApp functionality

Add transfer function

After the energy-saving equipment acquires CarbonCoin, it can sell CarbonCoin to the enterprise, such as airlines, etc. The simple embodiment is that the equipment account can be transferred to the corporate company account;

Open the /CarbonDApp/index.html page and add the code

1.1 U3 object used when establishing the transfer

let u3_bob = U3.createU3({ keyProvider:'5JoQtsKQuH8hC9MyvfJAqo6qmKLm8ePYNucs7tPu2YxG12trzBt',//bob's private key }) let u3_tom = U3.createU3({ keyProvider:'5KXYYEWSFRWfNVrMPaVcxiRTjD9PzHjBSzxhA9MeQKHPMxWP8kU',//tom's private key })

1.2 Add the js code of the transfer to call the corresponding smart contract method

async function sendCoin(from,to){ let SYMBOL = 'CARB'; let code = 'ben'; let coins = U3.format.DecimalPad(this.randomFrom(100,500),4); if (from == 'bob'){ const tr = await u3_bob.contract(code); const result = await tr.transfer(from, to, coins + ' ' + SYMBOL, 'sendCoin', { authorization: [`[email protected]`] }); let tx = await u3_bob.getTxByTxId(result.transaction_id); while (!tx.irreversible) { await wait(1000); tx = await u3_bob.getTxByTxId(result.transaction_id); if (tx.irreversible) { alert("bob send coin success:"+ coins); break; } } } else if (from == 'tom'){ const tr = await u3_tom.contract(code); const result = await tr.transfer(from, to, coins + ' ' + SYMBOL, 'sendCoin', { authorization: [`[email protected]`] }); let tx = await u3_tom.getTxByTxId(result.transaction_id); while (!tx.irreversible) { await wait(1000); tx = await u3_tom.getTxByTxId(result.transaction_id); if (tx.irreversible) { alert("tom send coin success:"+ coins); break; } } } }

1.3 Add a call to the sendcoin() method on the page, update the following code

<div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>节能设备1</h1> <p>账户:bob</p> <p>描述:通过节能产生CarbonCoin的节能设备1</p> <p id="bob_balance"></p> <p><a href="#" OnClick="sendCoin('bob','tony')">给航空公司C转账</a></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>节能设备2</h1> <p>账户:tom</p> <p>描述:通过节能产生CarbonCoin的节能设备2</p> <p id="tom_balance"></p> <p><a href="#" OnClick="sendCoin('tom','jerry')">给汽车制造商D转账</a></p> </div>

1.4 Access the page and test the function

Visit: http://127.0.0.1:3001/index.html, click the "Transfer to the airline C" button, wait for a period of time (up to about 10 seconds, confirm the time for the Ultrain transaction), the following prompt appears, indicating the transfer success.

Add a company to convert CarbonCoin to a charity point function

By converting CarbonCoin into charitable points, the company makes its own contribution to reducing carbon emissions and enhances its reputation:

Open the /CarbonDApp/index.html page and add the code

2.1 U3 object used when establishing point redemption

let u3_tony = U3.createU3({ keyProvider:'5KbHvFfDXovPvo2ACNd23yAE9kJF7Mxaws7srp6VapjMr7TrHZB',//tony's private key }) let u3_jerry = U3.createU3({ keyProvider:'5JFz7EbcsCNHrDLuf9VpHtnLdepL4CcAEXu7AtSUYfcoiszursr',//jerry's private key })

2.2 Add the redeemed js code to call the corresponding smart contract method

async function exchangeScore(account){ let SYMBOL = 'CARB'; let code = 'ben'; let to = 'jack'; let coins = U3.format.DecimalPad(this.randomFrom(10,50),4); if (account == 'tony'){ const tr = await u3_tony.contract(code); const result = await tr.exchangeScore(account, to, coins + ' ' + SYMBOL, 'sendCoin', { authorization: [`[email protected]`] }); let tx = await u3_tony.getTxByTxId(result.transaction_id); while (!tx.irreversible) { await wait(1000); tx = await u3_tony.getTxByTxId(result.transaction_id); if (tx.irreversible) { alert("tony buy score success:"+ coins); break; } } } else if (account == 'jerry'){ const tr = await u3_jerry.contract(code); const result = await tr.exchangeScore(account, to, coins + ' ' + SYMBOL, 'sendCoin', { authorization: [`[email protected]`] }); let tx = await u3_jerry.getTxByTxId(result.transaction_id); while (!tx.irreversible) { await wait(1000); tx = await u3_jerry.getTxByTxId(result.transaction_id); if (tx.irreversible) { alert("jerry buy score success:"+ coins); break; } } } }

2.3 Add a call to the exchangeScore() method on the page, update the following code

<div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>航空公司C</h1> <p>账户:tony</p> <p>描述:大型航空公司,化石能源使用大户</p> <p id="tony_balance"></p> <p><a href="#" OnClick="exchangeScore('tony');return false;">购买公益积分</a></p> </div> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>汽车制造商D</h1> <p>账户:jerry</p> <p>描述:大型汽车制造商,化石能源使用大户</p> <p id="jerry_balance"></p> <p><a href="#" OnClick="exchangeScore('jerry');return false;">购买公益积分</a></p> </div>

2.4 Access the page and test the function

Visit: http://127.0.0.1:3001/index.html, click the "Buy Charity Points" button, wait for a period of time (up to about 10 seconds, confirm the time for the Ultrain transaction), the following prompt appears, indicating that the points are successfully redeemed. At the same time, you can see the number of CarbonCoins destroyed in the CarbonCoin destruction account at the bottom of the page.

Query the public welfare points exchange history

By enquiring the redemption history of charity points, we can establish a ranking of corporate charity points.

3.1 Creating a page

In the CarbonDApp/public/ directory, create a new leaderboard.html and enter the following code:

<html> <head> <meta charset="UTF-8"> <title>leaderboard</title> <link rel="stylesheet" href="/stylesheets/style.css"> <script src="./javascripts/u3.js"></script> <script> let u3 = U3.createU3({ httpEndpoint: 'http://127.0.0.1:8888', httpEndpoint_history: 'http://127.0.0.1:3000', broadcast: true, debug: false, sign: true, logger: { log: console.log, error: console.error, debug: console.log }, chainId:'2616bfbc21e11d60d10cb798f00893c2befba10e2338b7277bb3865d2e658f58', symbol: 'UGAS' }); function wait(ms = 0) { return new Promise(res => setTimeout(res, ms)); } async function getLeaderboard() { let owner_account = 'ben'; const tr = await u3.contract(owner_account); const result = await u3.getAllTxs(1,10000000,{"actions.name":"exchangeScore"},{_id:-1}); //console.log(result); let content = ''; for ( let i = 0 ;i< result.results.length;i++){ content = content + '<tr><td>'+ result.results[i].actions[0].data.from+":"+result.results[i].actions[0].data.quantity +'</td></tr>'; } document.getElementById("leaderboard").innerHTML = content; } getLeaderboard(); </script> </head> <body> <div style="padding:8px;border:1px solid #96c2f1;background:#eff7ff"> <h1>leaderboard</h1> <table id="leaderboard"> </table> </div> </body> </html>

We use the u3.getAllTxs(1,10000000,{"actions.name":"exchangeScore"},{_id:-1}); method to query all redemption transactions and print their specific data to the page.

3.2 Run page

Visit http://127.0.0.1:3001/leaderboard.html and you can see the following page:

Here is a history of all points redemption.

Summary

This tutorial system describes how to write an end-to-end web version of the DApp application. Although it has been simplified in the process of writing, it generally describes the overall picture of DApp application development, developers can do the basis of this framework. Enrich and improve your DApp application.

About developing DApp on iOS and Android, you can integrate u3.js into the corresponding hybrid Native development framework, and the principle is the same as the web version DApp.

read more

讨论共识算法、经济模型以及智能合约的开发

Ultrain超脑信任计算-项目进展双周报(6/17-6/30)
B

以下为 6 月 17 日- 6 月 30 日项目进展双周报,包含#项目技术进展#及#社区动态更新#两项内容,供社区成员们查看,感谢大家对我们一直以来的热切关注!

项目进展双周报(6/17-6/30)

项目技术进展

• Ultrain 内核

静态TCP链接与动态TCP链接管理分离编码开发;

UDP协议应用层封装框架研究与集成分析;

优化本机不匹配的协议报文处理流程;

增强多链管理安全策略;

澳洲侧链部署以及支持币安 DEX交易所对接。

• Ultrain 智能合约及开发

完成主网映射所有文档和工具准备工作,开始交易所对接工作;

支持战略合作伙伴知链科技完成教学文档编写;

澳洲侧链项目需求确定,启动服务端以及合约侧编码开发。

• Ultrain 开发者套件

发布UltrainOne v2.2,支持多钱包管理,钱包密码修改及若干体验优化;

整理《Ultrain开发者手册》与《Ultrain DAPP接入规范》,待发布;

完成Cona插件钱包“连接”与“授权”功能的开发;

DAPP开放平台研发设计与第三方应用数据接口授权开发。

社区动态更新

• UltrainOne APP新版上线!

Ultrain官方APP——UltrainOne新版V2.2已上线!新版APP将支持账户绑定多个钱包、修改钱包密码,并优化了创建钱包流程及其它体验,欢迎大家更新使用!

• 社区精彩文章大放送!

近日,随着MIT图灵奖获得者创立的公链项目Algorand主网上线,Ultrain社区成员“仰望星空”(笔名)产出了一篇精彩文章《深入解析对比Algorand和Ultrain超脑链共识与生态》,全文分析客观、面面俱到,是一篇不可多得的好文,感兴趣的社区成员可扫码阅读!

• 跨链哪家强,跨洋大辩论!

6月20日晚,前 CoinDesk 亚洲战略发展编辑田川邀请到了Ultrain首席架构师沈宇峰和澳洲一线 crypto 投资机构 Crypto SA 联合创始人 /Algorand 澳洲大使 Yawn 展开了一场精彩的跨洋技术干货大辩论,重点分析近期大火的跨链话题,横向比较Ultrain、Cosmos、Polkadot在方方面面的异同。直播内容丰富、干货满满,欢迎扫二维码阅读直播内容实录!

• 超脑小象海报社区投票

上周,Ultrain于微信、Twitter分别进行了超脑小象海报社区有奖投票,海内外社区成员们均积极参与、反响强烈!(详情请戳有奖投票!快来pick你心目中最佳的超脑屏保)最终,票数统计结束后,以下这幅海报成为了票选冠军!感谢大家的热情参与,奖励将陆续发放到位!

• 超脑入选硅谷巨头加速器Plug and Play!

继微软加速器、亚马逊云创计划之后,Ultrain 再次成功入选硅谷巨头加速器 Plug and Play 物联网领域加速营!6 月 25 日,Plug and Play 中国在深圳开始举行“ Plug and Play 中国 2019 夏季峰会暨‘深’有新意创新启航”活动,深圳市政府有关部门的领导、来自日本和德国等国家的企业家代表、来自国内移动出行、金融科技、地产科技、物联网等领域的数十家知名大企业和创业公司代表、深耕创新理论研究的学界代表等,共计 200 余位嘉宾出席此次活动。Ultrain 生态副总裁 Samuel 肖颖浩也代表 Ultrain 进行了路演,并与在场众多知名大企业代表进行了深度交流和资源共享。详情请戳超脑入选硅谷巨头加速器Plug and Play!

• Ultrain 荣获「年度金融科技行业引领奖 」!

6月27日,Ultrain联合创始人&CEO 郭睿受邀出席了由上海财经大学金融科技研究院、聚菁会举办的第五届亚洲未来数字金融创新大会,并代表 Ultrain 领取了由大会颁发授予的「年度金融科技行业引领奖 」,此外,郭睿还于大会中进行了题为「基于区块链的未来商业基础设施」的演讲,获得了在场观众的一致认可!详情请戳Ultrain 荣获「年度金融科技行业引领奖 」!

以上便是 Ultrain 6 月 17 日至 6 月 30 日的项目进展,敬请期待此后的更多精彩内容!

read more

黑客马拉松与经常性的线下见面会或在线趣味游戏

超脑超星计划推进 十五支队伍并驱争先
B

——Ultrain“超星计划”首届颁奖典礼即将拉开帷幕

Ultrain超脑链联合火星财经于8月10日在北京朝阳区诚盈中心举办“超星计划”DApp开发者大赛首届线下颁奖典礼活动。本次活动凝聚了此次大赛排名前15的优秀DApp作品开发者。每支队伍都将展示各自项目的技术亮点及DApp使用场景,而由国内外顶级VC投资人和区块链领域专家组成的评审团队,将会全面考察参赛队伍技术、产品、商业等综合实力,对各个团队进行评选,在经济模型、商业模式、公司管理、资本运作等方面对各队伍进行综合指导和帮助。超脑链一直致力于完整的生态社区建设,为优秀的开发者提供更好的展示机会,以及更多的支持。

随着Ultrain“超星计划”的推进,参赛的队伍开始崭露头角,下面是关于参赛队伍DAPP的大致介绍。

链上恋:团队来自于杭州,基于区块链的情侣日记本。可以让情侣公开的见证永恒的誓言和聊天记录。让不希望恋爱回忆消逝的年轻人记录自己的青春。

Fanclub粉丝论坛:团队来自于上海,基于区块链的论坛,粉丝板块用于发帖,站务板块用于发布论坛资讯,票务板块用于出售演出票。论坛采用积分制,积分可通过每日登录、发帖、回帖来获取,积分用于购买演出票,或具有优先购买权。

Deswap交易协议: 团队来自于南京,DeSwap是一个去中心化的代币兑换系统,Ultrain上的交易代币协议。设计简便,交易快捷,为小规模代币提供流动性。无需用户挂单,也可以随时买卖。适用于超脑的UGAS和积分系统

海洋大亨: 团队来自于杭州,海洋大亨是⼀款模拟社交的游戏,游戏中融合鱼市买卖系统,模拟现实生活中,买鱼饵,造鱼钩,钓鱼到卖金币,形成商业闭环拥有组队系统,可邀请好友一起钓鱼,也可以随机匹配陌⽣人,在休闲娱乐的同时,也可以扩大自身的交际圈。

加密三国:团队来自于海外,加密三国志是一款全资产上链的游戏,具有真正游戏性的非博彩RPG 类游戏。在这个游戏中,玩家的目的是通过与 NPC或其他玩家对战,赚取稀有道具和三国币,用于提升自己的英雄和装备,并通过系统的分红机制赚取分红。

奶茶供应链: 团队来自于上海,该Dapp主要功能是记录一杯奶茶从生产到上市的整个过程中的信息。此Dapp有效提高奶茶在生产到上市过程中的可溯源性,公开性。可建立商家的信誉,提高消费者的信赖。建立一个更和谐健康的生态。

GBT预言: 团队来自于杭州,用户在该DAPP中可使用相应的代币进行预言,预言将扣除部分代币注入奖励池账户,为日后运营做基础。而大部分的代币将注入瓜分奖池账户,预言成功根据所投入代币比例瓜分奖池中代币,预言失败,则扣除投入代币。

IDE: 团队来自于南京,“ChainIDE”是全球第一个多链的智能合约集成环境(IDE), 能够快速的帮助开发者搭建初始的设计环境和节约成本。是一款优异的开发工具。

闪电保险:团队来自于重庆,通过区块链和人工智能技术,构建了保险商业联盟,将成熟稳定的人工智能的判别场景链入整个保险体系,从而将核保过程降为由机器识别、分钟级赔保的范围,极大提升用户体验,增加人们对保险产品信任感。

Last Trip “最后的旅途”:团队来自于南京, 是一款基于区块链的冒险解谜类游戏,玩家在游戏中是一个书写者。通过玩家各自的方式,撰写一本自己的《神曲》。游戏中包含了不同的文化,宗教,人文,故事,哲理。并将7种不同的画风,横跨欧亚非的哲理故事,数百种独立剧情,无数选择,人性,思考,迷雾,探索共融一炉。其完美结合区块链特性,将玩家的每一段旅途上链,并且化身为NPC,影响其他玩家的故事线。

区块链电商:团队来自于合肥,区块链电商项目可适用于多种购物场景和平台。在本次的模型设计中,我们以传统网购平台为载体,搭建一个基于区块链的网购平台,构建出一个可以实现保护用户隐私安全,减少信息骚扰的网购平台

餐引人:团队来自于杭州, 餐引人是基于区块链餐饮商家的一站式服务平台,链接小微餐饮商家的绝大多数服务商。以区块链技术为基础,力争打造“去中心化的真正可信的餐饮商家服务平台。

GC: 团队来自于杭州,作为垃圾分类的DAPP,一个有偿的知识分享平台,将代币和垃圾分类相结合,并逐渐形成垃圾分类知识库,设计简洁,功能清晰,是一款结合生活、环保的实用性DAPP。

Delibrary: 团队来自于南京, 是一款闲置图书共享领域的DAPP,拥有灵活经济激励模型,让更多的旧书籍放大其闲置图书的功效,可通过闲置图书的赠送、交换、出租和出售等操作实现资源的共享,并利用智能合约实现自动业务逻辑。

流浪宝贝: 一款专为流浪狗设计的DAPP,结合区块链,让用户的每一笔捐助触及狗狗本身。借助区块链,完成流浪狗身份溯源,监护人关系和捐助交易与消费流水。让流浪狗不在流浪!

read more

关于区块链与币市的行业动态与最新消息

超脑链荣获中华人民共和国国家版权局软件著作权!
B

8月6日,Ultrain超脑链团队自主研发的“超脑基础公链软件V1.0”成功获得中华人民共和国国家版权局软件著作权。计算机软件著作权是指软件的开发者或者其他权利人依据有关著作权法律的规定,对于软件作品所享有的各项专有权利。Ultrain获得此项著作权,真正标志着Ultrain公链技术荣获国家权威机构认可与肯定,并深受相关法律法规保护。

Ultrain在正式开源前获此项著作权,是技术发展道路上的重大里程碑。计算机软件著作权是我们的一项重要资本与财富,这在一定程度上证明了我们拥有核心自主知识产权,可为未来企业服务提供资质保证,也意味着超脑链公链技术价值倍增,奠定了我们在行业中的重要地位。此后,我们将在公链技术研发上又迈上一个新台阶,持续增强自主创新能力和核心竞争力,作为全球领先的商业公链,一如既往为业界创造更好的区块链基础设施,在实现公司愿景与使命的道路上持续奋进。

read more

链上分布式应用的开发工具以及高质量的应用推荐

新版Ultrain浏览器上线,终于可以查Token啦!
I

Ultrain测试网上线后,很多开发者尝试写了合约,并用Ultrain浏览器进行了合约的部署操作。其中最热门的就是发Token合约,大家也想亲身体验发Token的快感!连Ultrain团队的的好几个程序员都迫不及待地进行创建账户、申请资源、写合约、部署合约、调用合约等一系列流程,尝试发Token。

可是操作完,大家向产品经理抱怨:通过「超脑浏览器」对Token合约部署、调用操作之后,在浏览器找不到自己的Token信息。于是产品经理第一时间拉着视觉、开发们,完成了测试网超脑浏览器的Token查询的设计,同时新版的Ultrain浏览器也在很多方面做了优化,继续往下看吧!

1、新增首页数据
打开新版Ultrain浏览器,首页除了全新的视觉设计,一眼就能看到块高、交易数、账户数、合约数、Token数的信息,帮助用户直观地了解超脑链最新数据。

2、Token查询
部署完Token合约,直接在超脑浏览器就可以查询到Token信息,超方便啦!

3、查看账户内Token信息
除了Token列表,在自己的账户内也可以查看账户拥有的Token信息啦。不用手动搜索,浏览器自动同步账户内Token信息,很贴心了哦~

4、无线端兼容
新版的整体视觉做了优化,包括列表页、详情页、创建账户流程、合约部署和调用流程等,同时也特别对无线端做了兼容处理,让用户在手机上操作时更舒服。

5、其他
开发还在性能上、缓存策略上进行了优化,使页面加载速度有了明显提升。

Ultrain浏览器的地址(https://explorer.ultrain.io/),你也来试一试吧!有问题的话,可以到开发者门户-论坛(https://bbs.ultrain.io/)给我们留言哦!

read more