[w-steemjs] #001 이벤트 할 때 ~ 손쉽게 한번에 왕창 송금하기 !!

in #kr6 years ago (edited)

안녕하세요 @wonsama 입니다.

이벤트 하실때, 이벤트 당첨자 여러분들께 왕창 송금하시는 거 힘드시죠 ? 그래서 준비해 봤습니다. 한큐 송금 !

222.png


주의사항

  • nodejs 버전이지만 html에서도 약간 수정해서도 바로 사용 가능합니다.
  • 소스코드를 보시면 아시겠지만 'steemjs'를 활용하며 일체 보안 유출 없음
  • 사용시, 반드시 집 또는 개인 PC에서만 사용하기 바랍니다. (게임방, 학교... 하지말기)
  • 사용 시, 반드시 어느정도 프로그램을 숙지하신 이후 송금을 하기 바랍니다.
  • 송금에 대한 책임은 본인에게 있음을 미리 명시합니다.

반드시 위 주의사항을 숙지하신 이후 사용 바랍니다.


활용 예시

  • batchTrasfer 함수만 잘 쓰셔도 아이디 목록만 입력하여 대량 송금처리가 가능 합니다.

글 경로만 입력하면 댓글 목록 정보를 출력 확인 후 제외할 사용자의 아이디를 추가한 이후 해당 대상자에게만 일정 금액을 한번에 송금 처리 !!

C:\Users\wonsama\Desktop\tranfer_steem>node tran.js

ARTICLE_LINK :
 https://steemit.com/kr-diary/@wonsama/18-05-08-5
PERM_LINK :
 18-05-08-5

REPLY LIST :
ganzi / 아이들을 위한 다짐만으로도 이미 충분히 좋은 부모님입니다!
piggypet / 내리사랑을 잘 해내는 것도 효도의 한 길!
smigol / 정말 부모님께 감사한 날이지요. 저도 제 생일날 부모님께 감사드린다고 말씀드입니다. 이 세
xdaddygn / 1. 내리사랑을 주시는 부모님 넘 감사합니다. 2.수요예배 자리에서 더 많은 감사를 느끼리

total : 4
@ganzi 님에게 0.001 SBD 전송을 완료 했습니다. at ::: Wed May 09 2018 00:40:06 GMT+0900 (대한민국 표준시)
@piggypet 님에게 0.001 SBD 전송을 완료 했습니다. at ::: Wed May 09 2018 00:40:12 GMT+0900 (대한민국 표준시)
@smigol 님에게 0.001 SBD 전송을 완료 했습니다. at ::: Wed May 09 2018 00:40:18 GMT+0900 (대한민국 표준시)
@xdaddygn 님에게 0.001 SBD 전송을 완료 했습니다. at ::: Wed May 09 2018 00:40:24 GMT+0900 (대한민국 표준시)
총 4 분께 전송을 완료 했습니다.

소스코드 - 설정

const AUTHOR = '본인계정명'; //@이 빼고 본인 계정명 입력
const PRIVATE_KEY = '본인계정의private키'; // 본인 계정의 private 키 P5어쩌구저쩌구로 시작할 것임.
const SEND_MONEY = '0.001 SBD'; // 보내려는 금액, 자릿수 형태를 x.xxx SBD 또는 x.xxx STEEM 형태로 맞춰야 됨
const IS_SEND_MODE = false; // 송금실행 여부 ( 반드시 확인 후 송금 바랍니다.  true : 송금실행,  false : 확인만 )
const ARTICLE_LINK = 'https://steemit.com/kr-diary/@wonsama/18-05-08-5'; // 글 주소 
const BAN_AUTHOR = ['fadliestem']; // 제외하고자 하는 아이디

memo : `테스트송금 ::: @${arrSend[arrIdx].author} 님에게 ${SEND_MONEY} 를 보내 드립니다.(FREE)`


위 내용을 각자의 환경에 알맞게 바꿔주신 이후 테스트 하시면 됩니다.


소스코드

const steem = require('steem');

const AUTHOR = '본인계정명'; //@이 빼고 본인 계정명 입력
const PRIVATE_KEY = '본인계정의private키'; // 본인 계정의 private 키 P5어쩌구저쩌구로 시작할 것임.
const WIF = steem.auth.toWif( AUTHOR, PRIVATE_KEY, 'active'); // 송금이므로 active 권한을 요구함
const SEND_MONEY = '0.001 SBD'; // 보내려는 금액, 자릿수 형태를 x.xxx SBD 또는 x.xxx STEEM 형태로 맞춰야 됨
const IS_SEND_MODE = false; // 송금실행 여부 ( 반드시 확인 후 송금 바랍니다.  true : 송금실행,  false : 확인만 )
const ARTICLE_LINK = 'https://steemit.com/kr-diary/@wonsama/18-05-08-5'; // 글 주소 
const PERM_LINK = ARTICLE_LINK.substr( ARTICLE_LINK.lastIndexOf('/') + 1 );
const BAN_AUTHOR = ['fadliestem']; // 제외하고자 하는 아이디

// 대량 송금을 수행
// arrSend 보내고자 하는 정보가 담긴 배열목록
let batchTrasfer = (arrSend, arrIdx=0) =>{
    let p = {
        wif : WIF,
        from : AUTHOR,
        to : arrSend[arrIdx].author,
        amount : SEND_MONEY,
        memo : `테스트송금 ::: @${arrSend[arrIdx].author} 님에게 ${SEND_MONEY} 를 보내 드립니다.(FREE)`
    };
    steem.broadcast.transfer(p.wif, p.from, p.to, p.amount, p.memo, function(err, result) {
        if(err==null){
            console.log(`@${p.to} 님에게 ${p.amount} 전송을 완료 했습니다. at ::: ${new Date()}`);
            arrIdx++;
            if(arrIdx<arrSend.length){
                batchTrasfer(arrSend, arrIdx);
            }else{
                console.log(`총 ${arrSend.length} 분께 전송을 완료 했습니다.`);
            }
            
        }else{
            console.log(`전송실패 ::: 사유 ==> ${err}`);
        }
    });
}

// 컨텐츠 경로 기준 댓글 목록을 가져온다
let getContent = (pPermlink) => {return new Promise((resolve, reject)=>{
    let p = {
        author : AUTHOR,
        permlink : pPermlink
    };
    steem.api.getContentReplies(p.author, p.permlink, function(err, result) {
        if(err==null){
            resolve(result);
        }else{
            reject(err);
        }
    }); 
})};

// 댓글 목록을 가져와 후처리를 수행한다
getContent( PERM_LINK ).then(res=>{

    console.log();
    console.log('ARTICLE_LINK :\n', ARTICLE_LINK);
    console.log('PERM_LINK :\n', PERM_LINK);
    console.log();

    // 알파벳 순서로 아이디 정렬
    console.log('REPLY LIST :');
    res.sort((a,b)=>{
        if(a.author.toUpperCase() < b.author.toUpperCase())
            return -1;
        else if(a.author.toUpperCase() > b.author.toUpperCase())
            return 1;
        return 0;
    });

    // 제외하고 싶은 아이디 필터링 
    
    res = res.filter(x=>!BAN_AUTHOR.includes(x.author));

    for(item of res){
        console.log( `${item.author} / ${item.body.replace(/\n/gi,' ').substr(0,50)}` );
    }
    console.log( `\ntotal : ${res.length}` );

    // 대량 송금처리 :: 반드시 확인 후 송금 요망 !!
    if(IS_SEND_MODE){
        batchTrasfer(res);
    }

}).catch(console.log);
Sort:  

오..이런게 있다는걸 알았으니..
이제 어떻게 쓰는건지 공부해봐야겠습니다.

html 이랑 javascript 조금만 하셔도 금방 이해하실 수 있을거에요

저도 언젠가는 이렇게 왕창 송금해볼날이 오겠죠? ㅠㅠ

저에게 송금 테스트를 해보셔도... (쵹쵹쵹)🤺🤺🤺

우와! 이벤트 진행하며 너무 힘들었는걸요.
감사합니다. 언젠가 송금 이벤트 한번 해야겠네요.
리스팀 꾹!

송금시 반드시 유의사항 확인후 전송 부탁 드려요 ^^

좋은 정보 감사합니다~~
송금할때 아주 유익할것 같아요~~

넵 대량 송금이 워낙 귀찮은 일이라 ㅜㅜ

조금 비슷한 툴이 있습니다. 아래 링크에 Send SBD 탭.. ㅎㅎ

https://ianpark.github.io/steeme

만들다 말아서 기능이 단촐합니다만.. ㅠ

저도 참조해야겠네요 ㅎㅎ

아 그리고,
송금은 active키를 사용하는 것인지라... 웹주소나 앱으로 공개하는건 쫌 많이 조심스럽네요 오송금 또는 키저장을 기능을 통한 해킹?등이 문제가 될 수 있어서요...

갠적으로는 sc2(스팀커넥트)에서 token 권한을 active까지 올려주고(hot link말고) token의 유효시간을 10분 이내로 짧게 하여 제공해 주면 어떨까 싶네여...

그럼 송금등 할때 sc2 한번 로그인으로 다양한 작업을 할 수 있는 dApp을 만들 수 있을텐데... 라는 생각이 ㅜㅜ

해당 게시글에 댓글달면 재외된 아이디말고는 무조건전부다 자동으로 송금해주는 소스인가요? ? ? ? ?

네 맞습니다.

송금 이벤트하시는 분들 볼 때마다 저 많은 작업을 어떻게 하나 싶었는데,
이것도 프로그램화 가능하군요.^^

네 가능 합니다 ^^

오! 송금 대량으로 할때는 시간 딜레이 없이 빠르게 다 되는 가요.
post 경우는 쓰고 나면은 steemit 경우는 post 5분인가 대기 시간 있고 댓글은 20-30초 대기 시간있는 것 같은데 쓸때는 delay 시간은 없는지 궁금하네요.
읽는것은 API로 많이 연습했는데 쓰는 것은 아예 안해봐서요.
쓰는 걸 연습하면 봇을 만들고 싶어져서 안보고 있지만요.

송금하고 바로 콜백 받고 보내서 건당 3~5초 정도 걸리는거 같네여

시간제한이 아마 보팅이 3초 댓글 20초 글쓰기 5분 일거에여 아마 송금도 3초 정도 일듯...

좋은정보네요 몰랐는데 감사합니다^^

@tipu upvote this post with 5 sbd

Sorry, @tipU needs to recover voting power - will be back in 19 hours and 16 minutes. Please try then!

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.030
BTC 62630.85
ETH 2463.74
USDT 1.00
SBD 2.61