1918 lines
88 KiB
HTML
1918 lines
88 KiB
HTML
|
||
|
||
<!DOCTYPE html>
|
||
|
||
<!--
|
||
|
||
___ __ __ __ ___ __ ___ __
|
||
|
||
| \ | | | __ ___| | ___ |
|
||
|
||
| \ | | | |__ ___ | | | |
|
||
|
||
| |\ \| | | __ ___| | | | |
|
||
|
||
| | \ | | |__ ___ | |___| |
|
||
|
||
|__| \ ___| |__ __ ___| |__ ___ __|
|
||
|
||
|
||
|
||
https://neo.org/
|
||
|
||
|
||
|
||
Want to make this site better?
|
||
|
||
https://github.com/neo-project/neo.org
|
||
|
||
-->
|
||
|
||
|
||
|
||
<html lang="en">
|
||
|
||
<head prefix="og: http://ogp.me/ns#">
|
||
|
||
<meta charset="utf-8" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
||
<meta name="format-detection" content="telephone=no" />
|
||
|
||
<meta name="robots" content="index,follow">
|
||
|
||
<meta name="description" content='Neo is an open-source, community driven platform that is leveraging the intrinsic advantages of blockchain technology to realize the optimized digital world of the future.'>
|
||
|
||
<meta name="author" content="neo-project">
|
||
|
||
<meta name="application-name" content="neo.org">
|
||
|
||
<meta name="renderer" content="ie-stand">
|
||
|
||
<meta name="keywords" content=",Neo,Blockchain,智能经济,区块链">
|
||
|
||
<title>Neo Smart Economy</title>
|
||
|
||
<meta property="og:url" content="https://neo.org/" />
|
||
|
||
<meta property="og:type" content="website" />
|
||
|
||
<meta property="og:title" content="Neo Smart Economy" />
|
||
|
||
<meta property="og:description" content="Neo Smart Economy" />
|
||
|
||
<meta property="og:image" content="https://neo-web.azureedge.net/images/twitter-img.jpg" />
|
||
|
||
<meta name="twitter:title" content="Neo Smart Economy" />
|
||
|
||
<meta name="twitter:description" content="Neo Smart Economy" />
|
||
|
||
<meta name="twitter:image" content="https://neo-web.azureedge.net/images/twitter-img.jpg" />
|
||
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
|
||
|
||
|
||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||
|
||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||
|
||
<link rel="manifest" href="/site.webmanifest">
|
||
|
||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
|
||
|
||
<meta name="msapplication-TileColor" content="#00aba9">
|
||
|
||
<meta name="theme-color" content="#ffffff">
|
||
|
||
|
||
|
||
<link href="https://neo-web.azureedge.net/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
|
||
|
||
<link href="https://neo-web.azureedge.net/css/site.min.css?v=360D0BE60FF9991CCAC58AEFD33616A89B19D5074B2F88B173B442C17DC9E013" rel="stylesheet" />
|
||
|
||
<style>
|
||
|
||
@font-face {
|
||
|
||
font-family: 'WorkSans';
|
||
|
||
src: url('/font/WorkSans-Light.ttf');
|
||
|
||
font-weight: 300;
|
||
|
||
}
|
||
|
||
|
||
|
||
@font-face {
|
||
|
||
font-family: 'WorkSans'; /* project id 1408484 */
|
||
|
||
src: url('/font/WorkSans-Bold.ttf');
|
||
|
||
font-weight: 700;
|
||
|
||
}
|
||
|
||
|
||
|
||
@font-face {
|
||
|
||
font-family: 'WorkSans';
|
||
|
||
src: url('/font/WorkSans-SemiBold.ttf');
|
||
|
||
font-weight: 600;
|
||
|
||
}
|
||
|
||
|
||
|
||
@font-face {
|
||
|
||
font-family: 'NunitoSans';
|
||
|
||
src: url('/font/NunitoSans-ExtraBold.ttf');
|
||
|
||
font-weight: 800;
|
||
|
||
}
|
||
|
||
|
||
|
||
@font-face {
|
||
|
||
font-family: 'NunitoSans';
|
||
|
||
src: url('/font/NunitoSans-Bold.ttf');
|
||
|
||
font-weight: 700;
|
||
|
||
}
|
||
|
||
|
||
|
||
@font-face {
|
||
|
||
font-family: 'NunitoSans';
|
||
|
||
src: url('/font/NunitoSans-SemiBold.ttf');
|
||
|
||
font-weight: 600;
|
||
|
||
}
|
||
|
||
|
||
|
||
@font-face {
|
||
|
||
font-family: 'NunitoSans';
|
||
|
||
src: url('/font/NunitoSans-Regular.ttf');
|
||
|
||
font-weight: 400;
|
||
|
||
}
|
||
|
||
</style>
|
||
|
||
|
||
<link rel="stylesheet" href="https://neo-web.azureedge.net/css/home.min.css?v=49F5587338EEBE504A6CF9E20F0D4DB714E07595E477D68AD9612F917ABB483C" />
|
||
|
||
|
||
</head>
|
||
|
||
<body id="neo-body">
|
||
|
||
<nav class="navbar smart-scroll container-fluid navbar-expand-lg">
|
||
|
||
<div class="container">
|
||
|
||
<a class="mt-1" href="/">
|
||
|
||
<img id="whitelogo" src="https://neo-web.azureedge.net/images/logo files-white.svg" alt="Neo Logo" />
|
||
|
||
<img id="darklogo" src="https://neo-web.azureedge.net/images/logo files-dark.svg" alt="Neo Logo" />
|
||
|
||
</a>
|
||
|
||
<button class="navbar-toggler" type="button">
|
||
|
||
<div class="special-button">
|
||
|
||
<div class="top"></div>
|
||
|
||
<div class="bottom"></div>
|
||
|
||
</div>
|
||
|
||
</button>
|
||
|
||
|
||
|
||
<div class="collapse navbar-collapse">
|
||
|
||
<ul class="navbar-nav ml-auto">
|
||
|
||
<li class="nav-item" style="position: relative;">
|
||
|
||
<a class="nav-link dropdown-toggle" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||
|
||
Discover Neo
|
||
|
||
</a>
|
||
|
||
<div class="dropdown-menu p-2" aria-labelledby="dropdownMenuButton">
|
||
|
||
<i class="iconfont"></i>
|
||
|
||
<div class="row text-center text-md-left">
|
||
|
||
<div class="col-md-6">
|
||
|
||
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/about">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/nav-1.png" />
|
||
|
||
<div>
|
||
|
||
<strong>Neo Defined</strong>
|
||
|
||
<span>Learn about the Neo project</span>
|
||
|
||
</div>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
|
||
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/technology">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/nav-3.png" />
|
||
|
||
<div>
|
||
|
||
<strong>Neo Technology</strong>
|
||
|
||
<span>Explore the features</span>
|
||
|
||
</div>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
|
||
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/neogas">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/nav-2.png" />
|
||
|
||
|
||
|
||
<div>
|
||
|
||
<strong>NEO & GAS</strong>
|
||
|
||
<span>Neo’s unique dual token model</span>
|
||
|
||
</div>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
|
||
<a class="dropdown-item my-1 py-2 my-md-2 py-md-3" href="/contributors">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/nav-4.png" />
|
||
|
||
<div>
|
||
|
||
<strong>Contributors</strong>
|
||
|
||
<span>A global effort</span>
|
||
|
||
</div>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</li>
|
||
|
||
<li class="nav-item"><a class="nav-link" href="/gov">Governance</a></li>
|
||
|
||
<li class="nav-item"><a class="nav-link" href="/dev">Developer</a></li>
|
||
|
||
<li class="nav-item"><a class="nav-link" href="/eco">Eco-Support</a></li>
|
||
|
||
<li class="nav-item"><a class="nav-link" href="/news">News</a></li>
|
||
|
||
<li class="nav-item"><a class="nav-link" href="https://ndapp.org/" target="_blank">dApps</a></li>
|
||
|
||
<li class="nav-item d-block d-md-none"><a class="nav-link" href="/migration">Migration</a></li>
|
||
|
||
|
||
|
||
<li class="nav-item nav-lang">
|
||
|
||
<a style="font-size: 1em; font-weight: 600" class="nav-link" href="javascript:" onclick="setLanguage('en-us')">EN</a> |
|
||
|
||
<a style="font-size: .9em; font-weight: 500" class="nav-link" href="javascript:" onclick="setLanguage('zh-cn')">中文</a>
|
||
|
||
</li> </ul>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</nav>
|
||
|
||
<div class="container layout-container">
|
||
|
||
<div class="migration-div d-none d-md-block">
|
||
|
||
<a href="/migration">
|
||
|
||
<p class="migration-text tw-flex tw-gap-1 tw-text-lg tw-font-semibold">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/presskit/Neo symbol.svg" />
|
||
|
||
MIGRATE TO N3
|
||
|
||
</p>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="home-container">
|
||
|
||
<style>
|
||
.navbar.smart-scroll {
|
||
border-bottom: 1px solid rgba(0,0,0,0.05);
|
||
background-color: rgba(255,255,255,.95);
|
||
opacity: 0.95px;
|
||
}
|
||
|
||
.migration-div.d-md-block {
|
||
display: none !important;
|
||
}
|
||
|
||
.neox {
|
||
position: relative;
|
||
min-height: 740px;
|
||
background-image: url('/images/home/neox/bg.png');
|
||
background-repeat: no-repeat;
|
||
background-size: cover;
|
||
}
|
||
|
||
.neox .lt {
|
||
position: absolute;
|
||
height: 100%;
|
||
width: 100%;
|
||
background-repeat: no-repeat;
|
||
background-position-x: left;
|
||
background-position-y: top;
|
||
background-size: 20%;
|
||
background-image: url('/images/home/neox/lt.png')
|
||
}
|
||
|
||
.neox .lb {
|
||
position: absolute;
|
||
height: 100%;
|
||
width: 100%;
|
||
background-repeat: no-repeat;
|
||
background-position-x: left;
|
||
background-position-y: bottom;
|
||
background-size: 20%;
|
||
background-image: url('/images/home/neox/lb.png');
|
||
}
|
||
|
||
.neox .x {
|
||
position: absolute;
|
||
height: 100%;
|
||
width: 100%;
|
||
background-image: url('/images/home/neox/x.png');
|
||
background-repeat: no-repeat;
|
||
background-position-x: right;
|
||
background-position-y: top;
|
||
background-size: 55%;
|
||
}
|
||
|
||
.neox .container {
|
||
padding-top: 150px;
|
||
padding-bottom: 80px;
|
||
}
|
||
|
||
.neox h1 {
|
||
font-size: 4.8rem;
|
||
line-height: 1.1;
|
||
}
|
||
|
||
.neox .ls3 {
|
||
letter-spacing: 3px
|
||
}
|
||
|
||
@media only screen and (max-width: 992px) {
|
||
.neox h1 {
|
||
font-size: 3rem
|
||
}
|
||
|
||
.neox .lt {
|
||
background-size: 28%;
|
||
}
|
||
|
||
.neox .lb {
|
||
background-size: 28%;
|
||
}
|
||
|
||
.neox .x {
|
||
background-size: 70%;
|
||
}
|
||
|
||
.neox {
|
||
min-height: 640px;
|
||
}
|
||
}
|
||
|
||
@media only screen and (max-width: 768px) {
|
||
.neox .lt {
|
||
background-size: 50%;
|
||
}
|
||
|
||
.neox .lb {
|
||
background-size: 40%;
|
||
}
|
||
|
||
.neox .x {
|
||
background-size: 80%;
|
||
}
|
||
|
||
.neox {
|
||
min-height: 540px;
|
||
}
|
||
}
|
||
</style>
|
||
<div class="neox">
|
||
<div class="lt"></div>
|
||
<div class="lb"></div>
|
||
<div class="x"></div>
|
||
<div class="container">
|
||
<div class="row">
|
||
<div class="col-lg-6 pt-5">
|
||
<div class="work-sans-bold">
|
||
<h1 class="uppercase">
|
||
Introducing:<br />
|
||
Neo X
|
||
</h1>
|
||
</div>
|
||
<div class="work-sans-semibold my-4 uppercase ls3">
|
||
Neo’s EVM-based sidechain is here.<br />
|
||
Find out what opportunities await.
|
||
</div>
|
||
<div class="my-4">
|
||
<a href="https://x.neo.org/" target="_blank" class="btn-2">LEARN MORE</a>
|
||
</div>
|
||
<div class="work-sans-bold my-4">Latest News:</div>
|
||
<div class="my-4">
|
||
<a class="news-link" href="/blog/details/4317">Neo X Grind Hackathon kicks off for EVM innovators with over $22 million in prizes and grants <i class="iconfont circle-arrow-icon"></i></a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row horiz-row aio-row">
|
||
<div class="col-12 col-md-12">
|
||
<div class="aio-title d-none-zh">
|
||
<span class="green">All</span> in One - <span class="green">All</span> in Neo
|
||
</div>
|
||
<div class="aio-title d-none">
|
||
<span class="green">All</span> in One - <span class="green">All</span> in Neo
|
||
</div>
|
||
<div class="highlight-container">
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Interoperability.svg" />
|
||
<div class="highlight-name">Interoperability</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NativeOracles.svg" />
|
||
<div class="highlight-name">Native Oracles</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Self-SovereignID.png" />
|
||
<div class="highlight-name">Self-Sovereign ID</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/DecentralizedStorage.svg" />
|
||
<div class="highlight-name">Decentralized Storage</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NativeNameService.svg" />
|
||
<div class="highlight-name">Neo Name Service</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/OneBlockFinality.svg" />
|
||
<div class="highlight-name">One Block Finality</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/BestInClassTooling.svg" />
|
||
<div class="highlight-name">Best-In-Class Tooling</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/SmartContracts.svg" />
|
||
<div class="highlight-name">Smart Contracts</div>
|
||
</div>
|
||
<div class="highlight-wrapper">
|
||
<img class="highlight-img png" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Multi-Language.png" />
|
||
<div class="highlight-name">Multi-Language</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="additional-button-wrapper">
|
||
<a class="btn-2" target="_blank" href="/tour">Take A Tour</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="row dual-row get-started-row">
|
||
<div class="col-12 col-md-6 col-left">
|
||
<div class="get-started-title">
|
||
<span class="green">Neo</span> is
|
||
<br />
|
||
new again
|
||
</div>
|
||
<div class="explanation">
|
||
After four years of stable MainNet operation, Neo is undergoing its biggest evolution as it migrates to N3 - The most powerful and feature rich version of the Neo blockchain to date.
|
||
</div>
|
||
<a class="btn-2" href="/migration">Learn More</a>
|
||
|
||
<div class="additional-button-wrapper">
|
||
<a class="btn-2" target="_blank" href="/tour">Take A Tour</a>
|
||
</div>
|
||
</div>
|
||
<div class="col-12 col-md-6 col-right">
|
||
<div class="get-started-wrapper">
|
||
<a class="float-card" href="/neogas#wallets">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
Find a Wallet
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/FindWallet.svg" />
|
||
</a>
|
||
<a class="float-card" href="/neogas#tokens">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
Neo & Gas Tokens
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/LearnTokens.svg" />
|
||
</a>
|
||
<a class="float-card" href="/technology">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
Neo's Features
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/LearnFeatures.svg" />
|
||
</a>
|
||
<a class="float-card" href="https://developers.neo.org/docs">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
Documentation
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="building-blocks-container">
|
||
<div class="building-blocks-row">
|
||
<div class="col-left">
|
||
|
||
|
||
<div class="caption-square-container building-blocks">
|
||
|
||
<div class="caption-square-inner-wrapper">
|
||
|
||
<div class="title"><em>Building Blocks</em> for the Next Generation Internet</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="col-right">
|
||
<span>
|
||
<span class="building-blocks-subtitle">
|
||
Neo provides a full stack of features out of the box, but doesn't keep you boxed in.
|
||
</span>
|
||
|
||
<br /><br />
|
||
<span class="building-blocks-body">
|
||
Native functionality provides all the infrastructure you need to build complete decentralized applications, while advanced interoperability allows you to harness the power of the global blockchain ecosystem.
|
||
</span>
|
||
</span>
|
||
<a class="btn-2 building-blocks-btn" href="/technology#all-in-one">Learn More</a>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="neo-features-container">
|
||
|
||
|
||
|
||
<div class="neo-feature-item">
|
||
|
||
<div class="block-wrapper">
|
||
|
||
<div class="block-icon-wrapper">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/OneBlockFinality3D.svg" />
|
||
|
||
</div>
|
||
|
||
<div class="block-content-wrapper">
|
||
|
||
<div class="block-title">
|
||
|
||
<i class="iconfont circle-arrow-icon"></i>
|
||
|
||
One Block Finality
|
||
|
||
</div>
|
||
|
||
<div class="block-paragraph">
|
||
|
||
dBFT consensus mechanism guarantees fast and efficient finality in a single block.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="neo-feature-item">
|
||
|
||
<div class="block-wrapper">
|
||
|
||
<div class="block-icon-wrapper">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NativeOracles3D.svg" />
|
||
|
||
</div>
|
||
|
||
<div class="block-content-wrapper">
|
||
|
||
<div class="block-title">
|
||
|
||
<i class="iconfont circle-arrow-icon"></i>
|
||
|
||
Oracle
|
||
|
||
</div>
|
||
|
||
<div class="block-paragraph">
|
||
|
||
A built-in oracle enabling secured access to any off-chain data.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="neo-feature-item">
|
||
|
||
<div class="block-wrapper">
|
||
|
||
<div class="block-icon-wrapper">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoFS3D.svg" />
|
||
|
||
</div>
|
||
|
||
<div class="block-content-wrapper">
|
||
|
||
<div class="block-title">
|
||
|
||
<i class="iconfont circle-arrow-icon"></i>
|
||
|
||
NeoFS
|
||
|
||
</div>
|
||
|
||
<div class="block-paragraph">
|
||
|
||
A distributed data storage solution made for scalability and privacy.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="neo-feature-item">
|
||
|
||
<div class="block-wrapper">
|
||
|
||
<div class="block-icon-wrapper">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/SmartContracts3D.svg" />
|
||
|
||
</div>
|
||
|
||
<div class="block-content-wrapper">
|
||
|
||
<div class="block-title">
|
||
|
||
<i class="iconfont circle-arrow-icon"></i>
|
||
|
||
Smart Contracts
|
||
|
||
</div>
|
||
|
||
<div class="block-paragraph">
|
||
|
||
Write your smart contracts in C#, Go, Python, Java, or TypeScript.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="neo-feature-item">
|
||
|
||
<div class="block-wrapper">
|
||
|
||
<div class="block-icon-wrapper">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoNameService3D.svg" />
|
||
|
||
</div>
|
||
|
||
<div class="block-content-wrapper">
|
||
|
||
<div class="block-title">
|
||
|
||
<i class="iconfont circle-arrow-icon"></i>
|
||
|
||
Neo Name Service
|
||
|
||
</div>
|
||
|
||
<div class="block-paragraph">
|
||
|
||
A decentralized .neo domain name service for next-gen internet web applications.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="neo-feature-item">
|
||
|
||
<div class="block-wrapper">
|
||
|
||
<div class="block-icon-wrapper">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Interoperability3D.svg" />
|
||
|
||
</div>
|
||
|
||
<div class="block-content-wrapper">
|
||
|
||
<div class="block-title">
|
||
|
||
<i class="iconfont circle-arrow-icon"></i>
|
||
|
||
Interoperability
|
||
|
||
</div>
|
||
|
||
<div class="block-paragraph">
|
||
|
||
Poly.Network enabled cross-chain interoperability with Ethereum, Binance Chain, and more.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<div class="neo-feature-item">
|
||
|
||
<div class="block-wrapper">
|
||
|
||
<div class="block-icon-wrapper">
|
||
|
||
<img src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoID3D.svg" />
|
||
|
||
</div>
|
||
|
||
<div class="block-content-wrapper">
|
||
|
||
<div class="block-title">
|
||
|
||
<i class="iconfont circle-arrow-icon"></i>
|
||
|
||
NeoID
|
||
|
||
</div>
|
||
|
||
<div class="block-paragraph">
|
||
|
||
A set of self-sovereign decentralized identity solution standards.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="blockchain-caption-square-row">
|
||
|
||
|
||
<div class="caption-square-container blockchain">
|
||
|
||
<div class="caption-square-inner-wrapper">
|
||
|
||
<div class="title"><em>Blockchain</em><br />You know</div>
|
||
|
||
<div class="subtitle">
|
||
|
||
Write smart contracts in a language you already love
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
<a class="btn-2 code-learn-more" href="/technology#smart-contracts">Learn More</a>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="code-example-row">
|
||
<div class="language-list">
|
||
<div class="language-wrapper">
|
||
<div class="language-name">
|
||
Python
|
||
</div>
|
||
<div class="language-icon python" data-lang="python">
|
||
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/PythonDark.png?v=FA87DB6277DE398911235F4E6CA8BB2B70A049A0736A99DCA2446FE8E25C4FE1" />
|
||
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Python.png?v=F27CA4EF53EEEB69D69F8A327F7E4B97835F3C4F9A224874163B8856F176B32E" />
|
||
</div>
|
||
</div>
|
||
<div class="language-wrapper">
|
||
<div class="language-name">
|
||
C#
|
||
</div>
|
||
<div class="language-icon csharp" data-lang="csharp">
|
||
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/CSharpDark.png?v=1E83E06BE355719937418DF9F4566E8B692B75BDA1183FB0E1217B8D72D25038" />
|
||
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/CSharp.png?v=C9496386014700D21E30EE1BD6C1C47F5A46EFB47F5DF8955FEAA3263D9758C2" />
|
||
</div>
|
||
</div>
|
||
<div class="language-wrapper">
|
||
<div class="language-name">
|
||
Go
|
||
</div>
|
||
<div class="language-icon go" data-lang="go">
|
||
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GoDark.png?v=DE7AA8958667FB5445A874E59BDADBDB5A2EB3D6EDE70E5CFC699BFBD6471BCB" />
|
||
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Go.png?v=18D18CBCA8DC5822AB6CDE1D19997C340A4D699BEDEA35824DB5EADA8D4C7023" />
|
||
</div>
|
||
</div>
|
||
<div class="language-wrapper">
|
||
<div class="language-name">
|
||
Typescript
|
||
</div>
|
||
<div class="language-icon typescript" data-lang="typescript">
|
||
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/TypescriptDark.png?v=1993D830082C3EAD058D0E1E828CDEB707E3319DCAFCD58EF674BA6C36B0A837" />
|
||
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Typescript.png?v=D0FF6E2AEBE52B1C8BA48CDC13C581748D467D7DB5005BFDF9963F85F9586AEB" />
|
||
</div>
|
||
</div>
|
||
<div class="language-wrapper ">
|
||
<div class="language-name">
|
||
Java
|
||
</div>
|
||
<div class="language-icon java" data-lang="java">
|
||
<img class="language-img dark" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/JavaDark.png?v=0415D77042D0D4DB9DF5757D2AC220E98599DF22B02677B50969A8BEA3C7981D" />
|
||
<img class="language-img light" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Java.png?v=BD7F4EFF8ED65C73DE196484498308A84EF8D0BE8010AB8142874E69D57F16DA" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="code-window d-none" id="code-python">
|
||
|
||
|
||
<div class="top-bar">
|
||
|
||
<div class="top-bar-dots">
|
||
|
||
</div>
|
||
|
||
<div class="top-bar-title">
|
||
|
||
Python
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="top-bar-mobile">
|
||
|
||
<div class="top-bar-title-wrapper">
|
||
|
||
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/PythonDark.png" />
|
||
|
||
<div class="top-bar-title">
|
||
|
||
Python
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<i class="iconfont close-icon"></i>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<pre class="green code">
|
||
|
||
<code>
|
||
|
||
from boa3.builtin.contract import Nep17TransferEvent, abort
|
||
|
||
|
||
|
||
@metadata
|
||
|
||
def manifest_metadata() -> NeoMetadata:
|
||
|
||
meta = NeoMetadata()
|
||
|
||
meta.author = "coz"
|
||
|
||
return meta
|
||
|
||
|
||
|
||
OWNER = UInt160(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
|
||
|
||
TOKEN_TOTAL_SUPPLY = 100_000_000 * 100_000_000 # 10m total supply * 10^8 (decimals)
|
||
|
||
|
||
|
||
# Events
|
||
|
||
on_transfer = Nep17TransferEvent
|
||
|
||
|
||
|
||
@public
|
||
|
||
def transfer(from_address: UInt160, to_address: UInt160, amount: int, data: Any) -> bool:
|
||
|
||
assert len(from_address) == 20 and len(to_address) == 20
|
||
|
||
assert amount >= 0
|
||
|
||
|
||
|
||
# The function MUST return false if the from account balance does not have enough tokens to spend.
|
||
|
||
from_balance = get(from_address).to_int()
|
||
|
||
if from_balance < amount:
|
||
|
||
return False
|
||
|
||
|
||
|
||
# The function should check whether the from address equals the caller contract hash.
|
||
|
||
if from_address != calling_script_hash:
|
||
|
||
if not check_witness(from_address):
|
||
|
||
return False
|
||
|
||
|
||
|
||
# skip balance changes if transferring to yourself or transferring 0 cryptocurrency
|
||
|
||
if from_address != to_address and amount != 0:
|
||
|
||
if from_balance == amount:
|
||
|
||
delete(from_address)
|
||
|
||
else:
|
||
|
||
put(from_address, from_balance - amount)
|
||
|
||
|
||
|
||
to_balance = get(to_address).to_int()
|
||
|
||
put(to_address, to_balance + amount)
|
||
|
||
|
||
|
||
on_transfer(from_address, to_address, amount)
|
||
|
||
# if the to_address is a smart contract, it must call the contract's onPayment method
|
||
|
||
post_transfer(from_address, to_address, amount, data)
|
||
|
||
return True
|
||
|
||
</code>
|
||
|
||
</pre>
|
||
|
||
<div class="bottom-bar">
|
||
|
||
<div class="bottom-bar-title">Python Resources</div>
|
||
|
||
<div class="bottom-bar-buttons">
|
||
|
||
<a class="bottom-bar-button" href="https://docs.coz.io/neo3/boa/index.html" target="_blank">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
|
||
|
||
Documentation
|
||
|
||
</a>
|
||
|
||
<a class="bottom-bar-button" href="https://github.com/CityOfZion/neo3-boa/tree/development/boa3_test/examples" target="_blank">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
|
||
|
||
Templates
|
||
|
||
</a>
|
||
|
||
<a class="bottom-bar-button" href="dev#tooling">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
|
||
|
||
Tools
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="code-window d-none" id="code-csharp">
|
||
|
||
<div class="top-bar">
|
||
<div class="top-bar-dots">
|
||
</div>
|
||
<div class="top-bar-title">
|
||
C#
|
||
</div>
|
||
</div>
|
||
|
||
<div class="top-bar-mobile">
|
||
<div class="top-bar-title-wrapper">
|
||
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/CSharpDark.png" />
|
||
<div class="top-bar-title">
|
||
C#
|
||
</div>
|
||
</div>
|
||
<i class="iconfont close-icon"></i>
|
||
</div>
|
||
|
||
<pre class="green code">
|
||
<code>
|
||
using Neo;
|
||
using Neo.SmartContract;
|
||
using Neo.SmartContract.Framework;
|
||
using Neo.SmartContract.Framework.Attributes;
|
||
using Neo.SmartContract.Framework.Native;
|
||
using Neo.SmartContract.Framework.Services;
|
||
using System;
|
||
using System.Numerics;
|
||
|
||
namespace Desktop
|
||
{
|
||
[ManifestExtra("Author", "Neo")]
|
||
[ManifestExtra("Email", "dev@neo.org")]
|
||
[ManifestExtra("Description", "This is a contract example")]
|
||
[ContractSourceCode("https://github.com/neo-project/neo-devpack-dotnet/tree/master/src/Neo.SmartContract.Template")]
|
||
public class Contract1 : SmartContract
|
||
{
|
||
//TODO: Replace it with your own address.
|
||
[InitialValue("NiNmXL8FjEUEs1nfX9uHFBNaenxDHJtmuB", ContractParameterType.Hash160)]
|
||
static readonly UInt160 Owner = default;
|
||
|
||
private static bool IsOwner() => Runtime.CheckWitness(Owner);
|
||
|
||
// When this contract address is included in the transaction signature,
|
||
// this method will be triggered as a VerificationTrigger to verify that the signature is correct.
|
||
// For example, this method needs to be called when withdrawing token from the contract.
|
||
public static bool Verify() => IsOwner();
|
||
|
||
// TODO: Replace it with your methods.
|
||
public static string MyMethod()
|
||
{
|
||
return Storage.Get(Storage.CurrentContext, "Hello");
|
||
}
|
||
|
||
public static void _deploy(object data, bool update)
|
||
{
|
||
if (update) return;
|
||
|
||
// It will be executed during deploy
|
||
Storage.Put(Storage.CurrentContext, "Hello", "World");
|
||
}
|
||
|
||
public static void Update(ByteString nefFile, string manifest)
|
||
{
|
||
if (!IsOwner()) throw new Exception("No authorization.");
|
||
ContractManagement.Update(nefFile, manifest, null);
|
||
}
|
||
|
||
public static void Destroy()
|
||
{
|
||
if (!IsOwner()) throw new Exception("No authorization.");
|
||
ContractManagement.Destroy();
|
||
}
|
||
}
|
||
}
|
||
</code>
|
||
</pre>
|
||
<div class="bottom-bar">
|
||
<div class="bottom-bar-title">CSharp Resources</div>
|
||
<div class="bottom-bar-buttons">
|
||
<a class="bottom-bar-button" href="https://docs.neo.org/docs/n3/develop/write/basics.html" target="_blank">
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
|
||
Documentation
|
||
</a>
|
||
<a class="bottom-bar-button" href="https://github.com/neo-project/examples/tree/master/csharp" target="_blank">
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
|
||
Templates
|
||
</a>
|
||
<a class="bottom-bar-button" href="dev#tooling">
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
|
||
Tools
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="code-window d-none" id="code-go">
|
||
|
||
|
||
<div class="top-bar">
|
||
|
||
<div class="top-bar-dots">
|
||
|
||
</div>
|
||
|
||
<div class="top-bar-title">
|
||
|
||
Go
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="top-bar-mobile">
|
||
|
||
<div class="top-bar-title-wrapper">
|
||
|
||
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GoDark.png" />
|
||
|
||
<div class="top-bar-title">
|
||
|
||
Go
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<i class="iconfont close-icon"></i>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<pre class="green code">
|
||
|
||
<code>
|
||
|
||
package nep17Contract
|
||
|
||
|
||
|
||
var (
|
||
|
||
token nep17.Token
|
||
|
||
ctx storage.Context
|
||
|
||
)
|
||
|
||
// initializes the Token Interface and storage context
|
||
|
||
func init() {
|
||
|
||
token = nep17.Token{
|
||
|
||
...
|
||
|
||
Name: "Nep17 example",
|
||
|
||
Owner: util.FromAddress("NdHjSPVnw99RDMCoJdCnAcjkE23gvqUeg2"),
|
||
|
||
TotalSupply: 10000000000000000
|
||
|
||
}
|
||
|
||
ctx = storage.GetContext()
|
||
|
||
}
|
||
|
||
// Transfer token from one user to another
|
||
|
||
func (t Token) Transfer(ctx storage.Context, from, to interop.Hash160, amount int, data interface{}) bool {
|
||
|
||
amountFrom := t.CanTransfer(ctx, from, to, amount)
|
||
|
||
if amountFrom == -1 {
|
||
|
||
return false
|
||
|
||
}
|
||
|
||
|
||
|
||
if amountFrom == 0 {
|
||
|
||
storage.Delete(ctx, from)
|
||
|
||
}
|
||
|
||
|
||
|
||
if amountFrom > 0 {
|
||
|
||
diff := amountFrom - amount
|
||
|
||
storage.Put(ctx, from, diff)
|
||
|
||
}
|
||
|
||
|
||
|
||
amountTo := getIntFromDB(ctx, to)
|
||
|
||
totalAmountTo := amountTo + amount
|
||
|
||
storage.Put(ctx, to, totalAmountTo)
|
||
|
||
runtime.Notify("Transfer", from, to, amount)
|
||
|
||
if to != nil && management.GetContract(to) != nil {
|
||
|
||
contract.Call(to, "onNEP17Payment", contract.All, from, amount, data)
|
||
|
||
}
|
||
|
||
return true
|
||
|
||
}
|
||
|
||
</code>
|
||
|
||
</pre>
|
||
|
||
<div class="bottom-bar">
|
||
|
||
<div class="bottom-bar-title">Go Resources</div>
|
||
|
||
<div class="bottom-bar-buttons">
|
||
|
||
<a class="bottom-bar-button" href="https://github.com/nspcc-dev/neo-go/tree/master/examples" target="_blank">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
|
||
|
||
Documentation
|
||
|
||
</a>
|
||
|
||
<a class="bottom-bar-button" href="https://github.com/nspcc-dev/neo-go/tree/master/examples" target="_blank">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
|
||
|
||
Templates
|
||
|
||
</a>
|
||
|
||
<a class="bottom-bar-button" href="dev#tooling">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
|
||
|
||
Tools
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="code-window d-none" id="code-typescript">
|
||
|
||
|
||
<div class="top-bar">
|
||
|
||
<div class="top-bar-title">
|
||
|
||
Typescript
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="top-bar-mobile">
|
||
|
||
<div class="top-bar-title-wrapper">
|
||
|
||
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/TypescriptDark.png" />
|
||
|
||
<div class="top-bar-title">
|
||
|
||
Typescript
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<i class="iconfont close-icon"></i>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<pre class="green code">
|
||
|
||
<code>
|
||
|
||
import { SmartContract} from '@neo-one/smart-contract';
|
||
|
||
|
||
|
||
export class NEP17Contract extends SmartContract {
|
||
|
||
public readonly properties = {
|
||
|
||
name: 'NEO•ONE NEP17 Example',
|
||
|
||
groups: [],
|
||
|
||
trusts: '*',
|
||
|
||
permissions: [],
|
||
|
||
};
|
||
|
||
public readonly name = 'NEO•ONE NEP17 Example';
|
||
|
||
public readonly decimals = 8;
|
||
|
||
|
||
|
||
private readonly notifyTransfer = createEventNotifier<Address | undefined, Address | undefined, Fixed<8>>(
|
||
|
||
'Transfer', 'from', 'to', 'amount',
|
||
|
||
);
|
||
|
||
|
||
|
||
public transfer(from: Address, to: Address, amount: Fixed<8>, data?: any): boolean {
|
||
|
||
if (amount < 0) {throw new Error(`Amount must be greater than 0: ${amount}`);}
|
||
|
||
|
||
|
||
const fromBalance = this.balanceOf(from);
|
||
|
||
if (fromBalance < amount) { return false; }
|
||
|
||
|
||
|
||
const contract = Contract.for(to);
|
||
|
||
if (contract !== undefined && !Address.isCaller(to)) {
|
||
|
||
const smartContract = SmartContract.for<TokenPayableContract>(to);
|
||
|
||
if (!smartContract.approveReceiveTransfer(from, amount, this.address)) {
|
||
|
||
return false;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
const toBalance = this.balanceOf(to);
|
||
|
||
this.balances.set(from, fromBalance - amount);
|
||
|
||
this.balances.set(to, toBalance + amount);
|
||
|
||
this.notifyTransfer(from, to, amount);
|
||
|
||
|
||
|
||
if (contract !== undefined) {
|
||
|
||
const smartContract = SmartContract.for<TokenPayableContract>(to);
|
||
|
||
smartContract.onNEP17Payable(from, amount, data);
|
||
|
||
}
|
||
|
||
return true;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
</code>
|
||
|
||
</pre>
|
||
|
||
<div class="bottom-bar">
|
||
|
||
<div class="bottom-bar-title">Typescript Resources</div>
|
||
|
||
<div class="bottom-bar-buttons">
|
||
|
||
<a class="bottom-bar-button">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
|
||
|
||
Documentation
|
||
|
||
</a>
|
||
|
||
<a class="bottom-bar-button">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
|
||
|
||
Templates
|
||
|
||
</a>
|
||
|
||
<a class="bottom-bar-button" href="dev#tooling">
|
||
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
|
||
|
||
Tools
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="code-window d-none" id="code-java">
|
||
|
||
<div class="top-bar">
|
||
<div class="top-bar-dots">
|
||
</div>
|
||
<div class="top-bar-title">
|
||
Java
|
||
</div>
|
||
</div>
|
||
|
||
<div class="top-bar-mobile">
|
||
<div class="top-bar-title-wrapper">
|
||
<img class="top-bar-title-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/JavaDark.png" />
|
||
<div class="top-bar-title">
|
||
Java
|
||
</div>
|
||
</div>
|
||
<i class="iconfont close-icon"></i>
|
||
</div>
|
||
|
||
<pre class="green code">
|
||
<code>
|
||
package io.neow3j.examples.contractdevelopment.contracts;
|
||
|
||
import static io.neow3j.devpack.StringLiteralHelper.addressToScriptHash;
|
||
|
||
import io.neow3j.devpack.*
|
||
|
||
@ManifestExtra(key = "name", value = "FungibleToken")
|
||
@ManifestExtra(key = "author", value = "AxLabs")
|
||
@SupportedStandards("NEP-17")
|
||
@Permission(contract = "fffdc93764dbaddd97c48f252a53ea4643faa3fd") // ContractManagement
|
||
public class FungibleToken {
|
||
|
||
static final Hash160 owner = addressToScriptHash("NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBP");
|
||
|
||
@DisplayName("Transfer")
|
||
static Event3Args<Hash160, Hash160, Integer> onTransfer;
|
||
|
||
static final int initialSupply = 200_000_000;
|
||
static final int decimals = 8;
|
||
static final String assetPrefix = "asset";
|
||
static final String totalSupplyKey = "totalSupply";
|
||
static final StorageContext sc = Storage.getStorageContext();
|
||
static final StorageMap assetMap = sc.createMap(assetPrefix);
|
||
|
||
public static String symbol() {
|
||
return "FGT";
|
||
}
|
||
|
||
public static int decimals() {
|
||
return decimals;
|
||
}
|
||
|
||
public static int totalSupply() {
|
||
return getTotalSupply();
|
||
}
|
||
|
||
static int getTotalSupply() {
|
||
return Storage.getInteger(sc, totalSupplyKey);
|
||
}
|
||
|
||
public static boolean transfer(Hash160 from, Hash160 to, int amount, Object[] data)
|
||
throws Exception {
|
||
|
||
if (!Hash160.isValid(from) || !Hash160.isValid(to)) {
|
||
throw new Exception("From or To address is not a valid address.");
|
||
}
|
||
if (amount < 0) {
|
||
throw new Exception("The transfer amount was negative.");
|
||
}
|
||
if (!Runtime.checkWitness(from) && from != Runtime.getCallingScriptHash()) {
|
||
throw new Exception("Invalid sender signature. The sender of the tokens needs to be "
|
||
+ "the signing account.");
|
||
}
|
||
if (getBalance(from) < amount) {
|
||
return false;
|
||
}
|
||
if (from != to && amount != 0) {
|
||
deductFromBalance(from, amount);
|
||
addToBalance(to, amount);
|
||
}
|
||
|
||
onTransfer.fire(from, to, amount);
|
||
if (ContractManagement.getContract(to) != null) {
|
||
Contract.call(to, "onNEP17Payment", CallFlags.All, data);
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
public static int balanceOf(Hash160 account) throws Exception {
|
||
if (!Hash160.isValid(account)) {
|
||
throw new Exception("Argument is not a valid address.");
|
||
}
|
||
return getBalance(account);
|
||
}
|
||
|
||
@OnDeployment
|
||
public static void deploy(Object data, boolean update) throws Exception {
|
||
throwIfSignerIsNotOwner();
|
||
if (!update) {
|
||
if (Storage.get(sc, totalSupplyKey) != null) {
|
||
throw new Exception("Contract was already deployed.");
|
||
}
|
||
// Initialize supply
|
||
Storage.put(sc, totalSupplyKey, initialSupply);
|
||
// And allocate all tokens to the contract owner.
|
||
assetMap.put(owner.toByteArray(), initialSupply);
|
||
}
|
||
}
|
||
|
||
public static void update(ByteString script, String manifest) throws Exception {
|
||
throwIfSignerIsNotOwner();
|
||
if (script.length() == 0 && manifest.length() == 0) {
|
||
throw new Exception("The new contract script and manifest must not be empty.");
|
||
}
|
||
ContractManagement.update(script, manifest);
|
||
}
|
||
|
||
public static void destroy() throws Exception {
|
||
throwIfSignerIsNotOwner();
|
||
ContractManagement.destroy();
|
||
}
|
||
|
||
@OnVerification
|
||
public static boolean verify() throws Exception {
|
||
throwIfSignerIsNotOwner();
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Gets the address of the contract owner.
|
||
*
|
||
* @return the address of the contract owner.
|
||
*/
|
||
public static Hash160 contractOwner() {
|
||
return owner;
|
||
}
|
||
|
||
private static void throwIfSignerIsNotOwner() throws Exception {
|
||
if (!Runtime.checkWitness(owner)) {
|
||
throw new Exception("The calling entity is not the owner of this contract.");
|
||
}
|
||
}
|
||
|
||
private static void addToBalance(Hash160 key, int value) {
|
||
assetMap.put(key.toByteArray(), getBalance(key) + value);
|
||
}
|
||
|
||
private static void deductFromBalance(Hash160 key, int value) {
|
||
int oldValue = getBalance(key);
|
||
if (oldValue == value) {
|
||
assetMap.delete(key.toByteArray());
|
||
} else {
|
||
assetMap.put(key.toByteArray(), oldValue - value);
|
||
}
|
||
}
|
||
|
||
private static int getBalance(Hash160 key) {
|
||
return assetMap.getInteger(key.toByteArray());
|
||
}
|
||
|
||
}
|
||
</code>
|
||
</pre>
|
||
<div class="bottom-bar">
|
||
<div class="bottom-bar-title">Java Resources</div>
|
||
<div class="bottom-bar-buttons">
|
||
<a class="bottom-bar-button" href="https://neow3j.io" target="_blank">
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Documentation.png" />
|
||
Documentation
|
||
</a>
|
||
<a class="bottom-bar-button" href="https://github.com/neow3j/neow3j-examples-java/blob/master/src/main/java/io/neow3j/examples/contractdevelopment/contracts/" target="_blank">
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Templates.png" />
|
||
Templates
|
||
</a>
|
||
<a class="bottom-bar-button" href="dev#tooling">
|
||
<img class="button-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Tools.png" />
|
||
Tools
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<a class="btn-2 code-learn-more-mobile" href="/technology#smart-contracts">Learn More</a>
|
||
</div>
|
||
|
||
|
||
<div class="connection-line-row">
|
||
<div class="before-dual-tokens"></div>
|
||
</div>
|
||
|
||
<div class="dual-tokens-row">
|
||
<div class="col-left">
|
||
|
||
|
||
<div class="caption-square-container dual-tokens">
|
||
|
||
<div class="caption-square-inner-wrapper">
|
||
|
||
<div class="title"><em>Dual</em><br />Tokens</div>
|
||
|
||
<div class="subtitle">
|
||
|
||
Neo has a unique dual token model that separates governance from utility.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="col-right header-imgs">
|
||
|
||
|
||
<div class="dual-tokens-container">
|
||
|
||
<div class="dual-tokens-wrapper">
|
||
|
||
<div class="token-wrapper">
|
||
|
||
<img class="token-image" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/NeoTokenPolygon.svg" />
|
||
|
||
<span class="token-label">NEO token</span>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="token-wrapper">
|
||
|
||
<img class="token-image" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GasTokenPolygon.svg" />
|
||
|
||
<span class="token-label">GAS token</span>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<img class="dot-wall" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/DotWall.svg" />
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dual-tokens-row">
|
||
<div class="col-left">
|
||
<div class="dual-tokens-paragraph">
|
||
NEO token holders are the owners of the network and are able to participate in governance. NEO holders also receive passive distribution of the network utility token, GAS - No staking required. GAS rewards are increased for voting participation.
|
||
<br /><br /> GAS is used to pay for network fees, smart contract deployments, and in dApp purchases.
|
||
</div>
|
||
|
||
<div class="dual-tokens-horizLine"></div>
|
||
<div class="dual-tokens-buttons">
|
||
<a class="btn-2" href="/neogas#tokens">Learn More</a>
|
||
<a class="btn-4" href="/neogas#wallets">Find a Wallet</a>
|
||
</div>
|
||
</div>
|
||
<div class="col-right">
|
||
|
||
|
||
<div class="calculator">
|
||
|
||
<div class="calculator-header">
|
||
|
||
<div class="calculator-title">
|
||
|
||
NEO & GAS Calculator
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="calculator-body">
|
||
|
||
<div class="slider-row">
|
||
|
||
<div class="slider-before">
|
||
|
||
A user with
|
||
|
||
</div>
|
||
|
||
<input type="range" min="10" max="1000" value="500" class="slider" id="calculator-slider">
|
||
|
||
<div class="slider-after">
|
||
|
||
<img class="slider-neo-icon" src="https://neo-web.azureedge.net/images/transparent.png"
|
||
|
||
data-original="https://neo-web.azureedge.net/images/home/Neo-Symbol.svg" />
|
||
|
||
<div id="slider-current-value" class="ngc-slider-current-value">500</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="middle-text">
|
||
|
||
would receive up to
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="results-row">
|
||
|
||
<div class="result-col result-col-neo">
|
||
|
||
<div class="result-num result-holding ngc-result-holding">0.44</div>
|
||
|
||
<div class="gas-wrapper">
|
||
|
||
<img class="result-icon" src="https://neo-web.azureedge.net/images/transparent.png"
|
||
|
||
data-original="https://neo-web.azureedge.net/images/home/Gas-Symbol.svg" />
|
||
|
||
<div class="legend">
|
||
|
||
Gas Per Month<span class="green">*</span>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="status-text">For holding NEO</div>
|
||
|
||
</div>
|
||
|
||
<div class="plus-sign"><i class="iconfont"></i></div>
|
||
|
||
<div class="result-col result-col-gas">
|
||
|
||
<div class="result-num result-governance ngc-result-governance">17.52</div>
|
||
|
||
<div class="gas-wrapper">
|
||
|
||
<img class="result-icon" src="https://neo-web.azureedge.net/images/transparent.png"
|
||
|
||
data-original="https://neo-web.azureedge.net/images/home/Gas-Symbol.svg" />
|
||
|
||
<div class="legend">Gas Per Month<span class="green">*</span></div>
|
||
|
||
</div>
|
||
|
||
<div class="status-text">For Governance Participation</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="foot-note">
|
||
|
||
<span class="green">*</span>estimate based on average 20% circulating NEO voting participation
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script>
|
||
|
||
document.addEventListener('DOMContentLoaded', function () {
|
||
|
||
$("#calculator-slider").on("input", function (e) {
|
||
|
||
const { value } = e.currentTarget
|
||
|
||
$(".ngc-slider-current-value").html(value)
|
||
|
||
|
||
|
||
const holdingGas = (+value * 10512000 * 0.1 / 100000000 / 12).toFixed(2)
|
||
|
||
const governanceGas = (+value * 10512000 * 0.8 / 20000000 / 12).toFixed(2)
|
||
|
||
$(".ngc-result-holding").html(holdingGas)
|
||
|
||
$(".ngc-result-governance").html(governanceGas)
|
||
|
||
})
|
||
|
||
})
|
||
|
||
</script>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="connection-line-row">
|
||
<div class="before-governance"></div>
|
||
</div>
|
||
|
||
|
||
<div class="governance-section-pc">
|
||
<div class="col-left">
|
||
<div class="governance-img-container">
|
||
<img class="governance-img-horiz" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Governance.svg" />
|
||
</div>
|
||
<div class="governance-cards">
|
||
<span class="governance-learn-more">Learn More</span>
|
||
<div class="governance-card-container">
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
How to vote
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/vote.svg" />
|
||
</a>
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
General guide to governance
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
|
||
</a>
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
Register as a committee candidate
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/register.svg" />
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-right">
|
||
|
||
|
||
<div class="caption-square-container governance">
|
||
|
||
<div class="caption-square-inner-wrapper">
|
||
|
||
<div class="title"><em>On-chain</em><br />Governance</div>
|
||
|
||
<div class="subtitle">
|
||
|
||
A dynamic on-chain council voted in by the NEO token holders.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="governance-paragraph">
|
||
<span>
|
||
N3 introduces the ability for NEO holders to vote in council members and consensus nodes that maintain the liveliness of the Neo network and adjust critical blockchain parameters.
|
||
<br /><br />
|
||
<span class="governance-paragraph bold">
|
||
GAS rewards are distributed to both voters and committee members.
|
||
</span>
|
||
</span>
|
||
<div class="governance-green-horizline"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="governance-section-tablet">
|
||
<div class="governance-top-row">
|
||
<div class="governance-img-container">
|
||
<img class="governance-img-vert" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GovernanceTablet.svg" />
|
||
</div>
|
||
<div class="col-right">
|
||
|
||
|
||
<div class="caption-square-container governance">
|
||
|
||
<div class="caption-square-inner-wrapper">
|
||
|
||
<div class="title"><em>On-chain</em><br />Governance</div>
|
||
|
||
<div class="subtitle">
|
||
|
||
A dynamic on-chain council voted in by the NEO token holders.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="governance-paragraph">
|
||
<span>
|
||
N3 introduces the ability for NEO holders to vote in council members and consensus nodes that maintain the liveliness of the Neo network and adjust critical blockchain parameters.
|
||
<br /><br />
|
||
<span class="governance-paragraph bold">
|
||
GAS rewards are distributed to both voters and committee members.
|
||
</span>
|
||
</span>
|
||
<div class="governance-green-horizline"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="governance-cards">
|
||
<span class="governance-learn-more">Learn More</span>
|
||
<div class="governance-card-container">
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
How to vote
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/vote.svg" />
|
||
</a>
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
General guide to governance
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
|
||
</a>
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
Register as a committee candidate
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/register.svg" />
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="governance-section-mobile">
|
||
|
||
|
||
<div class="caption-square-container governance">
|
||
|
||
<div class="caption-square-inner-wrapper">
|
||
|
||
<div class="title"><em>On-chain</em><br />Governance</div>
|
||
|
||
<div class="subtitle">
|
||
|
||
A dynamic on-chain council voted in by the NEO token holders.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="governance-img-container">
|
||
<img class="governance-img-vert" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/GovernanceTablet.svg" />
|
||
</div>
|
||
<div class="governance-paragraph">
|
||
<span>
|
||
N3 introduces the ability for NEO holders to vote in council members and consensus nodes that maintain the liveliness of the Neo network and adjust critical blockchain parameters.
|
||
<br /><br />
|
||
<span class="governance-paragraph bold">
|
||
GAS rewards are distributed to both voters and committee members.
|
||
</span>
|
||
</span>
|
||
<div class="governance-green-horizline"></div>
|
||
</div>
|
||
<div class="governance-cards">
|
||
<span class="governance-learn-more">Learn More</span>
|
||
<div class="governance-card-container">
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
How to vote
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/vote.svg" />
|
||
</a>
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
General guide to governance
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/ReadDocumentation.svg" />
|
||
</a>
|
||
<a class="float-card" href="/gov">
|
||
<div class="card-text-wrapper">
|
||
<div class="green-vertline"></div>
|
||
<div class="card-text">
|
||
Register as a committee candidate
|
||
</div>
|
||
</div>
|
||
<img class="card-img" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/register.svg" />
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="connection-line-row">
|
||
<div class="before-contributors"></div>
|
||
</div>
|
||
|
||
<div class="contributors-row">
|
||
<div class="col-left">
|
||
|
||
|
||
<div class="caption-square-container contributors">
|
||
|
||
<div class="caption-square-inner-wrapper">
|
||
|
||
<div class="title"><em>Global</em><br />Contributors</div>
|
||
|
||
<div class="subtitle">
|
||
|
||
Neo is a joint effort by community groups from all over the world.
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="col-right">
|
||
<div class="github-container">
|
||
<div class="github-status d-none-zh">
|
||
<span class="github-status-num github-stars">3.4K</span>stars
|
||
</div>
|
||
<div class="github-status d-none">
|
||
<span class="github-status-num zh github-stars">3.4K</span>stars
|
||
</div>
|
||
<div class="github-status d-none-zh">
|
||
<span class="github-status-num github-forks">988</span>forks
|
||
</div>
|
||
<div class="github-status d-none">
|
||
<span class="github-status-num zh github-forks">988</span>forks
|
||
</div>
|
||
<div class="github-status d-none-zh">
|
||
<span class="github-status-num github-sub">388</span>subscribers
|
||
</div>
|
||
<div class="github-status d-none">
|
||
<span class="github-status-num zh github-sub">388</span>subscribers
|
||
</div>
|
||
<a href="https://github.com/neo-project" target="_blank" class="github-icon-wrapper"><img class="github-icon" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/images/home/GitHub.png" /></a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="contributors-img-wrapper" id="scroll-wrapper">
|
||
<img class="contributors-img" usemap="#contributorsmap" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/home/Contributors.svg">
|
||
<map name="contributorsmap">
|
||
<area shape="rect" coords="306 87 377 112" alt="NDG Enterprise GitHub" target="_blank" />
|
||
<area shape="rect" coords="306 119 377 142" alt="NDG Enterprise Website" target="_blank" />
|
||
<area shape="rect" coords="321 219 392 242" alt="NDG Tracker GitHub" href="https://github.com/neo-one-suite" target="_blank" />
|
||
<area shape="rect" coords="320 249 392 242" alt="NDG Tracker Website" href="https://neo-one.io" target="_blank" />
|
||
<area shape="rect" coords="402 303 473 325" alt="COZ GitHub" href="https://github.com/CityOfZion" target="_blank" />
|
||
<area shape="rect" coords="402 333 472 356" alt="COZ Website" href="https://coz.io" target="_blank" />
|
||
<area shape="rect" coords="715 174 787 196" alt="NEO Research GitHub" href="https://github.com/neoresearch" target="_blank" />
|
||
<area shape="rect" coords="715 203 787 226" alt="NEO Research Website" href="https://neoresearch.io" target="_blank" />
|
||
<area shape="rect" coords="805 304 876 326" alt="Red4Sec GitHub" href="https://github.com/red4sec" target="_blank" />
|
||
<area shape="rect" coords="805 335 876 356" alt="Red4Sec Website" href="https://red4sec.com/en" target="_blank" />
|
||
<area shape="rect" coords="932 221 1004 243" alt="AxLabs GitHub" href="https://github.com/AxLabs" target="_blank" />
|
||
<area shape="rect" coords="932 250 1004 273" alt="AxLabs Website" href="https://axlabs.com" target="_blank" />
|
||
<area shape="rect" coords="1053 316 1124 338" alt="NEO S.Petersburg Center GitHub" href="https://github.com/nspcc-dev/" target="_blank" />
|
||
<area shape="rect" coords="1053 340 1124 368" alt="NEO S.Petersburg Center Website" href="https://nspcc.ru/en/" target="_blank" />
|
||
<area shape="rect" coords="1390 291 1461 314" alt="NGD Shanghai GitHub" href="https://github.com/neo-project" target="_blank" />
|
||
<area shape="rect" coords="1390 321 1461 344" alt="NGD Shanghai Website" href="https://neo.org" target="_blank" />
|
||
<area shape="rect" coords="1479 205 1550 228" alt="NewEconoLab GitHub" href="https://github.com/NewEconoLab" target="_blank" />
|
||
<area shape="rect" coords="1479 235 1550 258" alt="NewEconoLab Website" href="https://nel.group/index-En.html" target="_blank" />
|
||
<area shape="rect" coords="1484 345 1554 366" alt="NEXT GitHub" href="https://github.com/NeoNEXT" target="_blank" />
|
||
<area shape="rect" coords="1484 335 1554 396" alt="NEXT Website" href="https://neonext.io" target="_blank" />
|
||
</map>
|
||
</div>
|
||
<div class="scroll-buttons">
|
||
<i class="iconfont disabled" id="scroll-left-btn"></i>
|
||
<i class="iconfont" id="scroll-right-btn"></i>
|
||
</div>
|
||
|
||
<div class="additional-wrapper">
|
||
<div class="additional-item">
|
||
<div class="additional-title">
|
||
Join the <span class="green">Community</span>
|
||
</div>
|
||
<div class="additional-icons">
|
||
<a href="https://www.facebook.com/NeoBlockchainOfficial" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://discord.gg/rvZFQ5382k" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://neo3.azureedge.net/images/qrcode.jpg" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a class="d-none-zh" href="https://t.me/NEO_EN" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a class="d-none" href="https://t.me/NEO_Chinese" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://weibo.com/neosmarteconomy" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://twitter.com/NEO_Blockchain" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://www.reddit.com/r/NEO/" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://medium.com/neo-smart-economy" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
</div>
|
||
</div>
|
||
<div class="additional-item">
|
||
<div class="additional-title">
|
||
Explore the <span class="green">Ecosystem</span>
|
||
</div>
|
||
<div class="additional-icons">
|
||
<a href="https://ndapp.org" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
</div>
|
||
</div>
|
||
<div class="additional-item">
|
||
<div class="additional-title">
|
||
Industry <span class="green">Partners</span>
|
||
</div>
|
||
<div class="additional-icons">
|
||
<a href="https://interwork.org" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://www.poly.network" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://bsnbase.io/g/main/index" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://dotnetfoundation.org" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
<a href="https://www.ieee.org" target="_blank"><i class="iconfont additional-icon"></i></a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="container">
|
||
<div class="row horiz-row latest-news-row">
|
||
<div class="latest-news-wrapper">
|
||
<div class="latest-news-title">
|
||
<span class="green">Latest</span> News
|
||
</div>
|
||
<div class="row list2">
|
||
|
||
|
||
<div class="col-md-4 group-0">
|
||
|
||
<div>
|
||
|
||
<a class="img" href="/blog/details/4317" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/upload/509c030f8aa44e3df62b.jpg"></a>
|
||
|
||
<div>
|
||
|
||
<div class="small">October 30, 2024<span> Blog</span></div>
|
||
|
||
<div class="list-title with-space"><h3><a href="/blog/details/4317">Neo X Grind Hackathon kicks off for EVM innovators with over $22 million in prizes and grants</a></h3></div>
|
||
|
||
<div class="list-summary with-space"><h4><a href="/blog/details/4317">Co-hosted with IOSG Kickstarter, Web3Labs, Foresight Ventures, and Bit…</a></h4></div>
|
||
|
||
|
||
|
||
<div class="small">
|
||
|
||
<a class="article-tag1 mr-1" href="/news?keywords=hackathon">#hackathon</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-4 group-0">
|
||
|
||
<div>
|
||
|
||
<a class="img" href="/blog/details/4316" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/upload/82716d87a41860cd25ba.jpg"></a>
|
||
|
||
<div>
|
||
|
||
<div class="small">October 25, 2024<span> Blog</span></div>
|
||
|
||
<div class="list-title with-space"><h3><a href="/blog/details/4316">Neo Global Development General Monthly Report: July - September 2024</a></h3></div>
|
||
|
||
<div class="list-summary with-space"><h4><a href="/blog/details/4316">🚀 Neo X: The start of a new chapter
During the reporting period, we …</a></h4></div>
|
||
|
||
|
||
|
||
<div class="small">
|
||
|
||
<a class="article-tag1 mr-1" href="/news?keywords=Monthly Report">#Monthly Report</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-4 group-0">
|
||
|
||
<div>
|
||
|
||
<a class="img" href="/blog/details/4315" src="https://neo-web.azureedge.net/images/transparent.png" data-original="/upload/2254a3bb54d4626b61ef.jpg"></a>
|
||
|
||
<div>
|
||
|
||
<div class="small">August 2, 2024<span> Blog</span></div>
|
||
|
||
<div class="list-title with-space"><h3><a href="/blog/details/4315">Neo launches NeoPod ambassador program</a></h3></div>
|
||
|
||
<div class="list-summary with-space"><h4><a href="/blog/details/4315">Following the launch of the Neo X MainNet, we are excited to announce …</a></h4></div>
|
||
|
||
|
||
|
||
<div class="small">
|
||
|
||
<a class="article-tag1 mr-1" href="/news?keywords=Neo X">#Neo X</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<a class="btn-n3 dark-blue view-all-btn" href="/news">View All</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<footer class="py-5">
|
||
|
||
<div class="container-fluid">
|
||
|
||
<div class="container subscribe-container">
|
||
|
||
<h4 class="d-inline subscribe-title">Subscribe to our monthly newsletter.</h4>
|
||
|
||
<br />
|
||
|
||
<span class="subscribe-paragraph">Keep up to date on all the news, events and developments.</span>
|
||
|
||
<!-- Begin Mailchimp Signup Form -->
|
||
|
||
<form action="https://neo.us4.list-manage.com/subscribe/post?u=228d6f3157920dc1cad664104&id=4f3883ac10" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate autocomplete="off">
|
||
|
||
<div id="mc_embed_signup_scroll">
|
||
|
||
<div class="mc-field-group form-inline">
|
||
|
||
<input type="email" class="form-control required email" value="" name="EMAIL" id="mce-EMAIL" placeholder="Enter Email Address">
|
||
|
||
<button class="form-control btn-2" type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe">Submit</button>
|
||
|
||
</div>
|
||
|
||
<div id="mce-responses" class="clear mt-2">
|
||
|
||
<div class="response" id="mce-error-response" style="display:none"></div>
|
||
|
||
<div class="response" id="mce-success-response" style="display:none">Thank you for subscribing!</div>
|
||
|
||
</div>
|
||
|
||
<!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
|
||
|
||
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_228d6f3157920dc1cad664104_4f3883ac10" tabindex="-1" value=""></div>
|
||
|
||
</div>
|
||
|
||
</form>
|
||
|
||
<script src="https://neo-web.azureedge.net/js/mc-validate.min.js?v=46D1392B815DE63F6EFCFC15028926C3FDBE28E15FDCDE784672996E14CC3128"></script>
|
||
|
||
<!--End mc_embed_signup-->
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="container">
|
||
|
||
<div class="row pt-4">
|
||
|
||
<div class="col-md-2">
|
||
|
||
<img class="my-3 img-fluid" src="https://neo-web.azureedge.net/images/transparent.png" data-original="https://neo-web.azureedge.net/images/logo files-dark.svg" style="width: 120px" />
|
||
|
||
</div>
|
||
|
||
<div class="col-md-2">
|
||
|
||
<h4 class="my-3">For Developers</h4>
|
||
|
||
<a href="/dev#tooling">Tooling</a>
|
||
|
||
<a href="/dev#examples">Examples & Tutorials</a>
|
||
|
||
<a target="_blank" href="https://docs.neo.org/">Documentation</a>
|
||
|
||
<a target="_blank" href="https://github.com/neo-project">GitHub</a>
|
||
|
||
<a href="/eco">Eco-Support</a>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-2">
|
||
|
||
<h4 class="my-3">For token holders</h4>
|
||
|
||
<a href="/gov">Governance</a>
|
||
|
||
<a href="/neogas">NEO & GAS</a>
|
||
|
||
<a href="/neogas#wallets">Wallet</a>
|
||
|
||
<a href="/news?type=blog">Blogs</a>
|
||
|
||
<a href="/news?type=event">Events</a>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-2">
|
||
|
||
<h4 class="my-3">Contact NGD</h4>
|
||
|
||
<a href="/joinus">Join US</a>
|
||
|
||
<a href="mailto:marketing@neo.org">Marketing</a>
|
||
|
||
<a href="mailto:eg@neo.org">EcoGrowth</a>
|
||
|
||
<a href="mailto:about@neo.org">General</a>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-2">
|
||
|
||
<h4 class="my-3">For Media</h4>
|
||
|
||
<a href="/about">About Neo</a>
|
||
|
||
<a href="/presskit">Press Kit</a>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-2">
|
||
|
||
<h4 class="my-3">Keep in touch</h4>
|
||
|
||
<a class="d-inline" target="_blank" href="https://www.facebook.com/NeoBlockchainOfficial"><i class="iconfont"></i></a>
|
||
|
||
<a class="d-inline" target="_blank" href="https://weibo.com/neosmarteconomy"><i class="iconfont"></i></a>
|
||
|
||
<a class="d-inline" target="_blank" href="https://twitter.com/neo_blockchain"><i class="iconfont"></i></a>
|
||
|
||
<a class="d-inline" target="_blank" href="https://discord.gg/rvZFQ5382k"><i class="iconfont"></i></a>
|
||
|
||
<a class="d-inline" href="javascript:" onclick="$('.wechat2').toggle('fast')"><i class="iconfont"></i></a>
|
||
|
||
<a class="wechat2" href="https://neo-web.azureedge.net/images/qrcode.jpg" target="_blank"><img src="https://neo-web.azureedge.net/images/qrcode.jpg" /></a>
|
||
|
||
<a class="d-inline" target="_blank" href="https://t.me/NEO_EN"><i class="iconfont"></i></a>
|
||
|
||
<a class="d-inline" target="_blank" href="https://www.reddit.com/r/NEO/"><i class="iconfont"></i></a>
|
||
|
||
<a class="d-inline" target="_blank" href="https://neo-blockchain.medium.com/"><i class="iconfont"></i></a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="mt-3 copyright-container">
|
||
|
||
<p class="op-70 copyright-paragraph">Copyright © Neo Team 2014-2025 <a class="d-none" href="/map"><small>Site map</small></a></p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</footer>
|
||
|
||
|
||
|
||
|
||
|
||
<form class="d-none" id="form_language" method="post" action="/home/setlanguage">
|
||
|
||
|
||
|
||
<p><input type="hidden" id="culture" name="culture" /><input type="hidden" id="returnUrl" name="returnUrl" /></p>
|
||
|
||
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8CzPQnOMQ9dKtMuc0rPdUJH2Uya_5-o-TcLXRabNDgPzXgwgh-sneB1z-mUeB5dq1ckDD7nu0exCfbl8Tqq-7IOwRMl1-DJS8a7MfXkHzLrDnS9SPa-wfOO_w6pfR5X-o5OihyCQ9MWEIpn_4SfkLVU" /></form>
|
||
|
||
<script src="https://neo-web.azureedge.net/lib/jquery/jquery.min.js?v=7AA6B0E08F48A0F95D8DF7EA89E4CBFE1EF3D1E8C0F7373F7F25EDFB4E4A325E"></script>
|
||
|
||
<script src="https://neo-web.azureedge.net/lib/popper.js/popper.min.js?v=FE3D4915823289BE1B6AE1DD3B07125518DC75627F9033C8E9F16C98BD80032B"></script>
|
||
|
||
<script src="https://neo-web.azureedge.net/lib/bootstrap/js/bootstrap.min.js?v=A4555D8DEE9F8ADC976E84A97DFE87E6BF5794B579F49BB56F133FED85F7D709"></script>
|
||
|
||
<script src="https://neo-web.azureedge.net/js/jquery.lazyload.min.js?v=47D12549F27B0331F4CC9F378FF3AF1D07F16F706D1155E5913BFDD830445151"></script>
|
||
|
||
<script src="https://neo-web.azureedge.net/js/jquery.throttle.min.js?v=24C80F4C12E34B7AD24EDEEDAC2DD82CE7F832DC06F9AE25E9D5B13BB1EF9017"></script>
|
||
|
||
<script src="https://neo-web.azureedge.net/js/text-autospace.js?v=BA0E1B981627A9622F2765E836A35FB88EF89F5986893C520E138775ADCC8E13"></script>
|
||
|
||
|
||
|
||
|
||
|
||
<script src="https://neo-web.azureedge.net/js/site.min.js?v=3CAAB36C885FBBA7FE49BB6CE4F890C7B71EDFC2ED1CC2FBBA5D69C113BEFEBC"></script>
|
||
|
||
|
||
|
||
|
||
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130525731-3"></script>
|
||
|
||
<script>
|
||
|
||
window.dataLayer = window.dataLayer || [];
|
||
|
||
function gtag() { dataLayer.push(arguments); }
|
||
|
||
gtag('js', new Date());
|
||
|
||
|
||
|
||
gtag('config', 'UA-130525731-3');
|
||
|
||
</script>
|
||
|
||
|
||
|
||
<script>
|
||
|
||
$('body').css('padding-top', $('.navbar').outerHeight() + 'px')
|
||
|
||
|
||
|
||
// detect scroll top or down
|
||
|
||
if ($('.smart-scroll').length > 0) { // check if element exists
|
||
|
||
var last_scroll_top = 0;
|
||
|
||
var scroll_active_top = 150;
|
||
|
||
$(window).on('scroll', function (e) {
|
||
|
||
if ($(this).hasClass("show")) {
|
||
|
||
return e.preventDefault()
|
||
|
||
}
|
||
|
||
|
||
|
||
scroll_top = $(this).scrollTop();
|
||
|
||
if (scroll_top <= 0 || scroll_top < scroll_active_top) {
|
||
|
||
$('.smart-scroll').removeClass('scrolled-up').removeClass('scrolled-down');
|
||
|
||
}
|
||
|
||
else if (scroll_top < last_scroll_top) {
|
||
|
||
$('.smart-scroll').removeClass('scrolled-down').addClass('scrolled-up');
|
||
|
||
}
|
||
|
||
else {
|
||
|
||
$('.smart-scroll').removeClass('scrolled-up').addClass('scrolled-down');
|
||
|
||
}
|
||
|
||
last_scroll_top = scroll_top;
|
||
|
||
});
|
||
|
||
}
|
||
|
||
|
||
|
||
//if ("en" == "zh") {
|
||
|
||
// $("a").each(function () {
|
||
|
||
// if ($(this).attr("href") && $(this).attr("href").startsWith("https://docs.neo.org")) {
|
||
|
||
// $(this).attr("href", $(this).attr("href").replace("en-us", "zh-cn"));
|
||
|
||
// }
|
||
|
||
// });
|
||
|
||
//}
|
||
|
||
</script>
|
||
|
||
|
||
|
||
|
||
<script src="https://neo-web.azureedge.net/lib/image-map-resizer/js/imageMapResizer.js"></script>
|
||
<script>
|
||
$(document).ready(function () {
|
||
$('map').imageMapResize();
|
||
|
||
try {
|
||
$.get("home/githubstatus", function (data) {
|
||
if (!data) return;
|
||
|
||
const starsCount = +(data.stargazers_count);
|
||
const stars = starsCount > 1000 ? `${(starsCount / 1000).toFixed(1)}K` : `${starsCount}`;
|
||
$(".github-stars").html(stars);
|
||
|
||
const forksCount = +(data.forks_count);
|
||
const forks = forksCount > 1000 ? `${(forksCount / 1000).toFixed(1)}K` : `${forksCount}`;
|
||
$(".github-forks").html(forks);
|
||
|
||
const subCount = +(data.subscribers_count);
|
||
const sub = subCount > 1000 ? `${(subCount / 1000).toFixed(1)}K` : `${subCount}`
|
||
|
||
$(".github-sub").html(sub);
|
||
});
|
||
} catch {
|
||
console.log('Failed to get GitHub status.')
|
||
}
|
||
});
|
||
|
||
$(".language-icon").on("click", function () {
|
||
$(".language-icon.selected").removeClass("selected")
|
||
const $el = $(this)
|
||
$el.addClass("selected")
|
||
|
||
const lang = $el.data("lang")
|
||
$(".code-window").addClass("d-none")
|
||
$("#code-" + lang).removeClass("d-none")
|
||
$('html').attr('data-code-window-open', lang)
|
||
})
|
||
|
||
const scrollDistance = 300;
|
||
|
||
function debounce(func, wait, immediate) {
|
||
var timeout;
|
||
return function () {
|
||
var context = this, args = arguments;
|
||
var later = function () {
|
||
timeout = null;
|
||
if (!immediate) func.apply(context, args);
|
||
};
|
||
var callNow = immediate && !timeout;
|
||
clearTimeout(timeout);
|
||
timeout = setTimeout(later, wait);
|
||
if (callNow) func.apply(context, args);
|
||
};
|
||
};
|
||
|
||
$("#scroll-wrapper").on("scroll", debounce(function (e) {
|
||
const scrollWrapper = $("#scroll-wrapper")
|
||
console.log(scrollWrapper.scrollLeft(), scrollWrapper.innerWidth());
|
||
if (scrollWrapper.scrollLeft() > 0) {
|
||
$("#scroll-left-btn").removeClass("disabled")
|
||
} else {
|
||
$("#scroll-left-btn").addClass("disabled")
|
||
}
|
||
if (scrollWrapper.scrollLeft() + 8 < scrollWrapper.width()) {
|
||
$("#scroll-right-btn").removeClass("disabled")
|
||
} else {
|
||
$("#scroll-right-btn").addClass("disabled")
|
||
}
|
||
}, 50))
|
||
|
||
$("#scroll-left-btn").click(function (e) {
|
||
if ($(this).hasClass("disabled")) {
|
||
e.preventDefault();
|
||
return;
|
||
}
|
||
|
||
$("#scroll-wrapper").animate({
|
||
scrollLeft: "-=" + scrollDistance
|
||
}, 650)
|
||
})
|
||
|
||
$("#scroll-right-btn").click(function (e) {
|
||
if ($(this).hasClass("disabled")) {
|
||
e.preventDefault();
|
||
return;
|
||
}
|
||
$("#scroll-wrapper").animate({
|
||
scrollLeft: "+=" + scrollDistance
|
||
}, 650)
|
||
})
|
||
|
||
$(".close-icon").on("click", function () {
|
||
$(".language-icon.selected").removeClass("selected");
|
||
$(".code-window").addClass("d-none")
|
||
$('html').removeAttr('data-code-window-open')
|
||
})
|
||
|
||
</script>
|
||
<script>
|
||
var scroll_active_top = 650;
|
||
</script>
|
||
|
||
|
||
</body>
|
||
|
||
</html>
|
||
|