BitClout API를 사용하여 BitClout에 게시하는 방법

BitClot 게시물을 작성하는 것은 결코 쉬운 일이 아닙니다.만약 트위터 API (일명 Tweepy) 를 사용한 적이 있다면, 이 API를 통해 밀어내는 것이 매우 간단하고 편리하다는 것을 기억할 수 있을 것이다.네가 해야 할 일은 트위터 API의 미리 정의된 함수를 호출하는 것이다.BitClout의 경우는 그렇지 않습니다.만약 당신이 포스터나 어떤 거래를 해야 한다면 (post도 거래이기 때문에) 세 가지 주요 절차를 거쳐야 한다.
단계 1: 거래 후 16진수 가져오기
2단계: 거래 기록 서명
3단계: 거래 제출.
첫 번째 단계와 세 번째 단계는 상당히 간단하지만 두 번째 단계는 많은 사람들이 완성하기 어렵다.이것이 바로 본문이 이 사람들에게 유용한 곳이다!귀하는 이 글은 귀하의 계정에서 댓글을 만드는 데만 사용됩니다.다른 사용자를 대표하여 게시물을 올릴 수 있는 서비스 (예: schedule post 또는 다른 것) 를 만들려고 시도할 수 없습니다.이 강좌는 코드에서 계정의seedHex를 사용할 것이기 때문에 테스트 계정을 사용해서 배우는 것도 권장합니다.다른 언어의 seedHex는 당신의 BitClout seed 짧은 말만큼 강력합니다.만약 누군가가 당신의seedHex를 방문할 수 있다면, 그들은 당신의 계좌로 어떤 일을 할 수 있습니다.만약 당신이 장기적으로 암호화 세계에 처해 있다면, 피드 단어 (또는 피드 16진법) 를 컴퓨터나 온라인 어느 곳에 저장할 위험을 알 수 있을 것이다.이것이 바로 네가 이 강좌를 배우기 위해 테스트 계정을 사용해야 하는 이유다. (내가 다시 한 번 말하지만.)
우리가 시작하기 전에, 나는 너희들에게 이 완전한 강좌는 파이톤으로 작성된 것이며, 너희들은 적어도 파이톤의 기초 지식을 익혀야 한다는 것을 알려주고 싶다.

  • 거래 후 16진수 가져오기:
    이 단계는 상당히 간단하다.https://bitclout.com/api/v0/submit-post 포트에서 필요한post의transactionHex를 수집하기만 하면 됩니다.다음은python 함수입니다.post의transactionHex를 되돌려줍니다
  • import json
    import requests
    
    def getPostTransaction(publicKey, body, imageUrl): 
    
      header = {
            "content-type": "application/json"
        }
    
      payload= {"UpdaterPublicKeyBase58Check": publicKey,
        "PostHashHexToModify": "",
        "ParentStakeID": "",
        "Title": "",
        "BodyObj": {"Body": body, "ImageURLs": imageUrl},
        "RecloutedPostHashHex": "",
        "PostExtraData": {},
        "Sub": "",
        "IsHidden":  False,
        "MinFeeRateNanosPerKB": 1000}
    
      res = requests.post(
            "https://bitclout.com/api/v0/submit-post", json=payload, headers=header)
    
      resJson = res.json()
      transactionHex = resJson["TransactionHex"]
      return transactionHex
    
    위 코드 세션에서 publicKey은 게시물을 게시하려는 계정의 공개 키를 가리키며, body은 게시물 내용의 문자열을 가리키며, imageURL은 목록 유형 변수로BitClout에 게시하고자 하는 이미지 URL을 저장하는 데 사용된다.영향력에서 top post 이미지를 사용하지 않으려면 imageURL[]으로 전달할 수 있다.

  • TransactionHex에 서명하려면 다음과 같이 하십시오.
    가장 중요한 단계는 거래에 서명하는 것이다.하지만 등등, 거래에 서명하는 것은 무엇을 의미하는가?응, 당신은 한 계좌에서 거래를 하기 때문에 그것을 은행 계좌 거래로 연결할 수 있어. 그 중에는 반드시 은행 계좌 소유자의 서명이 있어야 해.이게 의미가 있나요?
    서명 부분은 거래가 계좌 소유자 본인이 완성한 것이지 그 어떠한 도둑이 완성한 것이 아니라는 것을 확보하기 위한 것이다*.BitClout은 자체 ID 서비스를 개발하여 거래에 서명합니다.
  • 제3자 거래 서명 API가 있는데 예를 들어 this이다. 그러나 API의 작성자 본인이 이 API에 빈틈이 존재하고 귀하의 계좌 안전을 파괴할 수 있기 때문에 귀하는 상기 API를 사용하여 거래에 서명할 수 없습니다.하지만 걱정하지 마세요. 다른 방법으로 거래에 서명할 수 있어요!
    TransactionHex도 아이디 서비스 없이 서명할 수 있다.다음은python 스크립트입니다. 몇 밀리 초 안에 TransactionHex에 서명할 수 있습니다.다음 스크립트가 포함된 새python 파일 sign.py을 만듭니다.
    import hashlib
    import hmac
    
    def get_hmac(key, data):
        return hmac.new(key, data, hashlib.sha256).digest()
    
    def hmac_drbg(entropy, string):
        material = entropy + string
        K = b"\x00" * 32
        V = b"\x01" * 32
    
        K = get_hmac(K, V + b"\x00" + material)
        V = get_hmac(K, V)
        K = get_hmac(K, V + b"\x01" + material)
        V = get_hmac(K, V)
    
        temp = b""
        while len(temp) < 32:
            V = get_hmac(K, V)
            temp += V
    
        return temp[:32]
    
    #######
    
    g=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,
        0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
    p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
    n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    
    def point_add(point1, point2):
        # Returns the result of point1 + point2 according to the group law.
        if point1 is None:
            return point2
        if point2 is None:
            return point1
    
        x1, y1 = point1
        x2, y2 = point2
    
        if x1 == x2 and y1 != y2:
            return None
    
        if x1 == x2:
            m = (3 * x1 * x1) * pow(2 * y1, -1, p)
        else:
            m = (y1 - y2) * pow(x1 - x2, -1, p)
    
        x3 = m * m - x1 - x2
        y3 = y1 + m * (x3 - x1)
        result = (x3 % p, -y3 % p)
    
        return result
    
    def scalar_mult(k, point):
        # Returns k * point computed using the double and point_add algorithm.
        result = None
        addend = point
    
        while k:
            if k & 1:
                # Add.
                result = point_add(result, addend)
            # Double.
            addend = point_add(addend, addend)
            k >>= 1
    
        return result
    
    #######
    
    def to_DER(r, s): # Signature to DER format
        r = bytes.fromhex(r)
        s = bytes.fromhex(s)
        if r[0] > 0x80:
            r = bytes.fromhex("00")+r
        if s[0] > 0x80:
            s = bytes.fromhex("00")+s
        res = bytes.fromhex("02"+hex(len(r))[2:]) + r + bytes.fromhex("02"+hex(len(s))[2:]) + s
        res = bytes.fromhex("30"+hex(len(res))[2:]) + res
    
        return res.hex()
    
    
    
    def Sign_Transaction(seedHex, TransactionHex):
        s256 = hashlib.sha256(hashlib.sha256(bytes.fromhex(TransactionHex)).digest()).digest()
        drbg = hmac_drbg(entropy=bytes.fromhex(seedHex), string=s256)
        k = int.from_bytes(drbg, 'big')
        kp = scalar_mult(k, g)
        kpX = kp[0]
        r = kpX % n
        s = pow(k, -1, n) * (r * int(seedHex, 16)+int(s256.hex(), 16))
        s = s % n
        signature = to_DER(hex(r)[2:].zfill(64), hex(s)[2:].zfill(64))
        signed_transaction = TransactionHex[:-2] + hex(len(bytearray.fromhex(signature)))[2:] + signature
    
        return signed_transaction
    
    방법 Sign_Transaction(seedHex, TransactionHex)은seedHex와TransactionHex를 두 개의 매개 변수로 한다.브라우저 저장소에서 계정의 seedHex를 찾을 수 있습니다.https://bitclout.com/> 개발 도구 > 애플리케이션 > 스토리지 > 로컬 스토리지 > https://identity.bitclout.com> 사용자 > 게시할 공개 키 선택 > seedHex주의: 영원히 누구와도 당신의 seedHex를 공유하지 마세요.공유 seedHex는 공유 seed 구문에 해당합니다.
    두 번째 인자 TransactionHex은 서명할 업무입니다.
    다른 한편, I은 상술한 코드를 만들지 않았지만, 나는 상술한 코드가 안전하다는 것을 확보할 수 있다!당신은 환매 협의 here을 볼 수 있습니다.
    주의: 본 논문의 코드만 사용해야 하며, 본 논문에서 언급한 다른 환매 프로토콜의 코드를 사용해서는 안 됩니다.본고의 코드는 안전하고 귀하의 개인 정보(예를 들어seedHex)는 그 어떠한 제3자와 공유되지 않습니다.안전을 위해서, 당신은 반드시 코드 sign.py을 직접 보아야 합니다.

  • 서명 제출 후 거래:
    세 번째이자 마지막 단계는 서명된postTransactionHex를 제출하는 것입니다.다음은 https://bitclout.com/api/v0/submit-transaction으로 업무를 제출하는python 코드입니다
  • import requests
    
    def submitTransaction(signedTransactionHex):
        payload= {
            "TransactionHex": signedTransactionHex
        }
        response = requests.post(
            "https://bitclout.com/api/v0/submit-transaction", json=payload)
    
        return response.status_code
    
    submitTransaction 방법은 signedTransactionHex을 매개 변수로만 받아들인다.
    BitClout에 게시물을 게시하는 데 필요한 3단계입니다.상기 세 가지 절차를 총괄하면 다음은 100%의 작업 코드이다.
    
    import os
    import requests
    import json
    import hashlib
    import hmac
    
    
    def getPostTransaction(publicKey, body, imageUrl): 
    
      header = {
            "content-type": "application/json"
        }
    
      payload= {"UpdaterPublicKeyBase58Check": publicKey,
        "PostHashHexToModify": "",
        "ParentStakeID": "",
        "Title": "",
        "BodyObj": {"Body": body, "ImageURLs": imageUrl},
        "RecloutedPostHashHex": "",
        "PostExtraData": {},
        "Sub": "",
        "IsHidden":  False,
        "MinFeeRateNanosPerKB": 1000}
    
      res = requests.post(
            "https://bitclout.com/api/v0/submit-post", json=payload, headers=header)
    
      resJson = res.json()
      transactionHex = resJson["TransactionHex"]
      return transactionHex
    
    
    def get_hmac(key, data):
        return hmac.new(key, data, hashlib.sha256).digest()
    
    def hmac_drbg(entropy, string):
        material = entropy + string
        K = b"\x00" * 32
        V = b"\x01" * 32
    
        K = get_hmac(K, V + b"\x00" + material)
        V = get_hmac(K, V)
        K = get_hmac(K, V + b"\x01" + material)
        V = get_hmac(K, V)
    
        temp = b""
        while len(temp) < 32:
            V = get_hmac(K, V)
            temp += V
    
        return temp[:32]
    
    #######
    
    g=(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,
        0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
    p=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
    n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    
    def point_add(point1, point2):
        # Returns the result of point1 + point2 according to the group law.
        if point1 is None:
            return point2
        if point2 is None:
            return point1
    
        x1, y1 = point1
        x2, y2 = point2
    
        if x1 == x2 and y1 != y2:
            return None
    
        if x1 == x2:
            m = (3 * x1 * x1) * pow(2 * y1, -1, p)
        else:
            m = (y1 - y2) * pow(x1 - x2, -1, p)
    
        x3 = m * m - x1 - x2
        y3 = y1 + m * (x3 - x1)
        result = (x3 % p, -y3 % p)
    
        return result
    
    def scalar_mult(k, point):
        # Returns k * point computed using the double and point_add algorithm.
        result = None
        addend = point
    
        while k:
            if k & 1:
                # Add.
                result = point_add(result, addend)
            # Double.
            addend = point_add(addend, addend)
            k >>= 1
    
        return result
    
    #######
    
    def to_DER(r, s): # Signature to DER format
        r = bytes.fromhex(r)
        s = bytes.fromhex(s)
        if r[0] > 0x80:
            r = bytes.fromhex("00")+r
        if s[0] > 0x80:
            s = bytes.fromhex("00")+s
        res = bytes.fromhex("02"+hex(len(r))[2:]) + r + bytes.fromhex("02"+hex(len(s))[2:]) + s
        res = bytes.fromhex("30"+hex(len(res))[2:]) + res
    
        return res.hex()
    
    
    
    def Sign_Transaction(seedHex, TransactionHex):
        s256 = hashlib.sha256(hashlib.sha256(bytes.fromhex(TransactionHex)).digest()).digest()
        drbg = hmac_drbg(entropy=bytes.fromhex(seedHex), string=s256)
        k = int.from_bytes(drbg, 'big')
        kp = scalar_mult(k, g)
        kpX = kp[0]
        r = kpX % n
        s = pow(k, -1, n) * (r * int(seedHex, 16)+int(s256.hex(), 16))
        s = s % n
        signature = to_DER(hex(r)[2:].zfill(64), hex(s)[2:].zfill(64))
        signed_transaction = TransactionHex[:-2] + hex(len(bytearray.fromhex(signature)))[2:] + signature
    
        return signed_transaction
    
    
    def submitTransaction(signedTransactionHex):
        payload= {
            "TransactionHex": signedTransactionHex
        }
        response = requests.post(
            "https://bitclout.com/api/v0/submit-transaction", json=payload)
    
        return response.status_code
    
    
    
    if __name__ == "__main__":
      postBody = "In retrospect, it was inevitable 💎🤲 " #don't dare change this body, Diamondhands won't like you
      imageURL = []
      seedHex = "YOUR_SEED_HEX"  # It is recommended to store your seedHex as environment variable
      publicKey = "YOUR_PUBLIC_KEY" 
    
      postTxn = getPostTransaction(publicKey, postBody, imageURL)
      signedTxn = Sign_Transaction(seedHex,postTxn)
      status = submitTransaction(signedTxn)
    
      if status == 200:
        print("Post done!")
      else:
        print("Error " + str(status))
    
    다음은 위 코드의 결과입니다.

    축하합니다!당신은 코드를 통해BitClout에 글을 올렸습니다.
    만약 당신이 이 글을 좋아한다면, 평론에서 우리에게 알려주거나, DevsClout에 메시지를 남기는 것을 잊지 마세요.당신도DevClout discord server에 가입하여BitClout에서 멋진 프로젝트를 구축하는 개발자와 채팅을 할 수 있습니다!우리는 너의 메아리를 매우 듣고 싶다.

    좋은 웹페이지 즐겨찾기