stellar 암호화 화폐로 지불 발송 및 수신

배경.


나는 암호화폐가 투기 이외의 다른 용도로 쓰일 수 있다고 매우 믿는다.
나는 전자상거래에 쓰이는 암호화 화폐가 그리 어렵지 않을 것이라고 믿는 것을 간단하게 보여 주었다.
나도 남을 설득했으면 좋겠어.

프레젠테이션 정보


이 프레젠테이션은 그림을 보여 주는 갤러리 웹 응용 프로그램입니다.고객은 이미지를 주문하고 결제 정보를 받을 수 있습니다.고객은 Stellar 네트워크를 통해 갤러리에 돈을 지불한다.갤러리에서 돈을 받은 후 고객은 높은 해상도 이미지를 얻을 것이다.
암호화폐로 Stellarstellar.org를 선택했습니다.Stellar는 빠른 저렴한 업무와 좋은api를 제공합니다. 테스트 네트워크를 사용합니다.이것은 기본적으로 독점 자금으로 거래를 한다는 것을 의미한다.
면책 성명: 제 시스템의 안전성에 대해 의심의 눈길을 주십시오.이것은 단지 stellar를 사용하여 지불을 보내고 받는 예일 뿐이다.

링크

  • The demo
  • Client CodeSandbox
  • Client on Github
  • Server on Github
  • 콘셉트


    서버가 시작되었고 갤러리의 stellar 계좌에서 받은 돈을 감청하기 시작했다.받은 결제는 주문서를 결제됨으로 표시합니다.
    일반적인 클라이언트 - 서버 상호 작용은 다음과 같습니다.
  • 클라이언트가 서버에서 축소판 그림을 수집합니다.
  • 클라이언트가 서버에 주문을 하고 비망록과 다운로드 키를 응답으로 받는다.
  • 클라이언트가 서버로 스트리밍/채널을 실행하는 SSEServer Sent Event를 시작합니다.이 흐름은 서버가 받은 지불을 감청하는 데 사용됩니다.
  • 고객은 받은 비망록을 사용하여 갤러리 계좌에 돈을 지불한다.
  • 클라이언트는 서버가 결제를 받은 사실을 알았습니다.
  • 클라이언트는 서버에'대화상 URL'을 조회하고 비망록과 다운로드 키를 제공합니다.만약 주문서가 서버에 지불된 것으로 표시되면 클라이언트는 URL을 받을 것입니다.
  • 클라이언트가 이미지 서버에서 고해상도 이미지를 다운로드합니다.
  • 이 고객은 일류 계좌를 만들고'독점자금'으로 자금을 제공하는 기능도 갖추고 있다.(항성 테스트 네트워크에서만 자금 부분이 궤도에서 벗어날 수 있다.)
    다음은 내가 위에서 묘사하려고 시도한 그림이다.

    기본 요소:


    손님: 네.


    react 응용 프로그램.https://create-react-app.dev/부터.
    만약 네가 알고 있다면 이것은 어렵지 않을 것이다.나는 간단함을 유지하기 위해 Redux,react router,axios를 피했다.반대로 나는 상하문으로 상태와 간단한 경로를 표시한다.Fetch는 백엔드와 통신하는 데 사용됩니다.

    결제 페이지에는 설명이 필요합니다.



    전자상거래 사이트에 대해 말하자면, 계좌를 만들어 자동으로 그것을 돈으로 채우는 것은 상관없다.
    나는 대부분의 경우 고객이 휴대전화의 지갑으로 돈을 지불할 것이라고 생각한다.그래서 결제 페이지가 좀 이상해요.
    만약 계좌 잔액의 변화가 예술품의 가격을 초과했다는 것을 알아차린다면, 이것은 거래비로 인해 일어난 것이다.
    나는 here에서 대부분의'항성과 상호작용'코드를 복제했다
    이것이 바로 하나의 계좌를 창설하고 지원하는 간단한 정도이다.
    export async function createAccount() {
      const pair = StellarSdk.Keypair.random();
      try {
        const response = await fetch(
          `https://friendbot.stellar.org?addr=${encodeURIComponent(
            pair.publicKey()
          )}`
        );
        const responseJSON = await response.json();
        console.log("SUCCESS! You have a new account :)\n", responseJSON);
        return pair;
      } catch (e) {
        console.error("ERROR!", e);
      }
    }
    

    서버


    Go로 제작되었습니다.

    주요 수입 및 부품

  • Gin Web Framework

  • Gorm 데이터베이스 처리를 더욱 쉽게 한다.
  • PostgreSQL
  • 약간의 세부 사항


    받은 돈을 처리하는 고루틴이 시작할 때 시작합니다.그것은 stellar 네트워크에서 온 SSE 흐름을 듣고 갤러리 계좌의 모든 돈을 받고 있다.나는 the horizonclient를 사용하여 지불 흐름을 진행하고 있다.결제가 정상적으로 이루어지면 주문은 결제됨으로 표시되고 의사록(주문 ID)은 모든 고객에게 브로드캐스트됩니다.고객은 비망록이 그들을 위해 준비되었는지 스스로 결정해야 한다.보안은 다운로드 키에 있습니다.downloadkey와 memo의 정확한 조합이 없으면 클라이언트는 '큰 파일 URL' 을 얻을 수 없습니다.
    goroutine에서 지불을 감청하고 있습니다:
    go func(){
      for{
        //Start listening for payments on the shops account
        client := horizonclient.DefaultTestNetClient
        opRequest := horizonclient.OperationRequest{ForAccount: *account_publickey}
        err := client.StreamPayments(context.Background(), opRequest, controllers.CreatePaymentHandler(broadcaster, *account_publickey, client))
        if err != nil {
          fmt.Println(err)
        }
      }
    }()
    
    SSE는 고객에게 알립니다.모든 고객은 모든 비망록을 받을 것이다.
    고객으로 흐르는 데이터 흐름은 gin에서 처리합니다.
    r.GET("/stream", func(c *gin.Context) {
      ch := make(chan interface{})
      broadcaster.Register(ch)
      defer broadcaster.Unregister(ch)
    
      c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
      c.Writer.Header().Set("Content-Type", "text/event-stream")
      c.Writer.Header().Set("Cache-Control", "no-cache")
      c.Writer.Header().Set("Connection", "keep-alive")
      c.Writer.Header().Set("Transfer-Encoding", "chunked")
      c.Writer.Flush()
      c.Stream(func(w io.Writer) bool {
        // Stream message to client from message channel
        if msg, ok := <-ch; ok {
          c.SSEvent("message", msg)
          return true
        }
        return false
      })
    })
    

    프로덕션 설정 데모


    나는 가장 저렴한 라인 서버와 Ubuntu 20.04, docker, docker compose를 사용한 적이 있다.
    리버스 프록시 Traefik에서 https 및 Letsencrypt 인증서를 처리하고 있습니다.
    DockerFile은 각각의 github 저장소에 있습니다.(본문 첫머리에 연결됩니다.)
    나는 이미 데이터베이스가 PostgreSQL이라고 언급했다.
    아마도 나는 앞으로 이 설정에 관한 내용을 더 많이 쓸 것이다.

    여기서부터.


    아마도 나는 새로운 예술을 추가하는 관리 페이지를 추가해야 할 것 같다.나는 모든 방문객이 이 동작을 집행할 수 있기를 원하지 않는다.
    This article는 내가 고려하고 사용한 재미있는 신분 검증 개념을 묘사했다.

    좋은 웹페이지 즐겨찾기