ブロックチェーンの下でアプリケーションを書き換えます

前後







この記事はSolidityでのコードの記述方法ではなく、アプリケーションの既存のクラシックアーキテクチャをブロックチェーンのレールに移行し、分散化の鍵を考える方法についてです。







数年前、私はパッケージ配信サービスp2p用の1つの興味深いWebアプリケーションに取り組んでいました。 特定の理由で、プロトタイプ段階で開発を凍結する必要があったため、GitHubにソースコードを投稿しただけで、忘れてしまいました。







最近、私の活動の性質上、暗号通貨とブロックチェーン技術に関連するいくつかのプロジェクトで偶然仕事をしました。 イーサリアムとその分散アプリケーション(ĐApp)のイデオロギーに近づいたので、私はこのアイデアを得ました:検閲も、誰もあなたのビジネスをカバーできず、誰もあなたの資金を押収することができず、あなたはあなたのアプリケーションが実行されているサーバーをオン/オフすることはできません ある時点で、プロジェクトが生き残るチャンスがあるような環境にあるという結論に達しました。







だから、仕事の前を見てください。







仕事の前



このプロジェクトの当初のアイデアは、旅行する人はスーツケースや車に入れて何かを運ぶことができるということでした。 配達のための一種のユーバー。 ユーザーは旅行者(ロバ)と顧客に分けられました。 たとえば、今週末にモスクワからミンスクに行く場合は、輸送できるものと時間を説明した新しい旅行(旅行)をサービスに追加できます。 この指示に同意したクライアントは、新しい旅行に関する通知を受け取り、たとえば母親に何らかの薬やiPadなどの配達要求を追加できます。 当事者は、支払い(PayPalの自己書面によるエスクロー)と配送条件について合意しました。 注文の実行後、当事者は互いに評価とコメントを残すことができます。 各ユーザーのプロファイルにはいくつかの統計がありました。







時間が経つにつれて、サービスのアルゴリズムのいくつかのポイントが再考されました。 最初に顧客が輸送の注文を追加し、ロバがサービスを提供する人をすでに選択している場合は正しいことが明らかになりました。 次に、この概念がどのように柔軟性と拡張性を提供するかを見ていきます。







基本的に、バックエンド全体をスマートコントラクトに書き換えて、ブロックチェーンに展開する必要があります。 アプリケーションは完全にオープンで、不変で、分散化されているため、開発者による規制もありません。 したがって、誰でもフロントエンド、モバイル、またはサーバーアプリケーションを実装できる分散プラットフォームになります。







このようなサービスのプロトコルは、短い形式で次のようになります。









さあ始めましょう



このプロトコルは、Oslikiと呼ばれるSolidityのスマートコントラクトによって実装されます。 開始するには、注文、オファー、請求書、統計を保存するための変数を作成しましょう。







Order[] public orders; //  Offer[] public offers; //  (       ) Invoice[] public invoices; //  mapping (address => Stat) internal stats; //      
      
      





すべての構造の説明:







 struct Order { address customer; // ethereum-  string from; //     "lat,lon"  ethereum- "0x..." (   , ,    )     (    ,   ) string to; //      string params; //     "(),(),(),()" uint expires; //    , Unix-   string message; //      uint[] offerIds; //  id  address carrier; // ethereum-      uint invoiceId; //    EnumOrderStatus status; //   uint createdAt; //   uint updatedAt; //   } struct Offer { address carrier; // ethereum-  uint orderId; // id  string message; //      string respond; //       . uint createdAt; uint updatedAt; } struct Invoice { address sender; // ethereum-  uint orderId; // id  uint prepayment; //    (  0) uint deposit; //    (  0) uint expires; //    EnumCurrency currency; //      bytes32 depositHash; //  Ethereum-SHA-3 (Keccak-256)   (     ) EnumInvoiceStatus status; //   uint createdAt; uint updatedAt; } struct Stat { uint[] orders; //  id           uint rateSum; //   uint rateCount; //  ,   averageRate = rateSum / rateCount mapping (uint => Review) reviews; //  id        } struct Review { uint8 rate; //   1  5 string text; //   uint createdAt; }
      
      





ステータス:







 enum EnumOrderStatus { New, Process, Fulfilled } enum EnumInvoiceStatus { New, Settled, Closed, Refund } enum EnumCurrency { ETH, OSLIK } //     ( 1%)      OSLIK ( )
      
      





さらに、関数の本体を提供しません。そうしないと、スペースを取りすぎます。 以下は、GitHubのソースコードへのリンクです。







顧客による注文の追加:







 function addOrder( string from, // "" || "lat,lon" || ethereum- "0x..." string to, // "" || "lat,lon" || ethereum- "0x..." string params, // "weight(kg),length(m),width(m),height(m)" uint expires, string message ) public;
      
      





ロバは提案を追加します:







 function addOffer( uint orderId, string message ) public;
      
      





クライアントが返信を送信します。







 function respond( uint offerId, string message ) public; //     
      
      





ロバは請求書を送ります:







 function addInvoice( uint orderId, uint prepayment, uint deposit, EnumCurrency currency, // ETH || OSLIKI uint expires ) public;
      
      





顧客が請求書を支払う:







 function pay( uint invoiceId, bytes32 depositHash //    keccak256     ,            ) public payable; //  ,             
      
      





ロバが注文を果たします。 たとえば、配送時にドンキーは、預け入れキーが縫い付けられているクライアントからのQRコードをスキャンします。







 function fulfill( uint orderId, string depositKey //       depositHash,       ,         '' ) public;
      
      





ロバは、クライアントが満足していないか、プロセスで問題が発生した場合、クライアントに資金を返します。







 function refund( uint invoiceId ) public payable;
      
      





締約国は、注文の印象の評価とともに、相互のレビューを追加できます。







 function addReview( uint orderId, uint8 rate, string text ) public; //    
      
      





さらに、データにアクセスするための一連の機能。 その結果、2つの契約が得られました。











本質的に、Osliki契約は配達注文のオープンデータベースであり、個人、組織、またはAmazon Prime Airのようなドローンで使用できます。







あなたの街の建物の屋根に基づいた貨物ドローンの艦隊を持つ起業家を想像してください。 ドローンはブロックチェーン上のデータベースを監視し、注文が特定の特定のパラメーター(貨物の許容範囲や寸法など)を満たしている場合、オファーと請求書を自動的に送信してから、注文を実行するために飛びます。







クレイグリストのMr. Xが、カントリーハウスで(もちろん、合法である国で)特に香りの良い大麻を栽培していると想像してください。 他のロバがオファーをスパムしないように、彼はあなたにミスターXのイーサリアムアドレスで直接オスリキに注文を追加できるリンクを投げます。 次に、請求書、支払い、そして今パッケージはあなたの手に既にあります。 また、X氏のアカウントがCraiglistでブロックされている場合でも、ガーデニングの才能のあるファンは、注文の送信先を常に覚えています。







農民が「庭から新鮮な」遺伝子組み換え作物、新鮮な牛乳、肉なしで生物野菜を販売している市場を想像できます。 配達は、例えば、郊外から市内まで通っているドライバーによって実行できます。 したがって、農家はスーパーマーケットを迂回して小売顧客に無制限にアクセスできます。







まあ、都市と国の間​​で荷物を運ぶ旅行者に関する最初のアイデアも関連性があります。







計画



プラットフォームの一部として、同じ分散市場(Osliki Marketplace)またはメッセージボード(Osliki Classifieds)がここにうまく適合します。 または、既製のソリューションを使用することもできます。







BigDataおよびAIメソッドを使用すると、各ユーザーの動作と統計をより深く分析し、信頼性に関する結果を得ることができます。 たとえば、自分で評価を作成したユーザーを特定できます。







現時点では、いくつかのGitHubページにフロントエンドosliki-jsアプリケーションを(実装オプションの1つとして)実装し、ブラウザーで通常の方法でコントラクトを操作できるようにすることが課題です。 さらに、サイトに埋め込むための一連のウィジェット。







トピックが興味深いと思われる場合は、開発に参加してください。







参照資料



GitHubソースコードリンク:









契約は現在、Ethereum Ropstenテストネットワークのzapdeloinsです。 プレイするエーテルをテストするには、 ここにアクセスできます







契約住所:










All Articles