در بیتکوین کامپیوترهای شبکه (گرهها) و ماینرها که باید کار تایید تراکنشها رو انجام بدن، اطلاعات «حسابهای» شبکه رو نگهداری نمیکنن. بلکه «تراکنشهای» شبکه رو نگهداری میکنن. به همهی تراکنشها هم نیازی ندارن و میتونن فقط «تراکنشهای خرج نشده» رو نگه دارن.
فرض کنید علی و حسن هر کدوم با تراکنشهای الف و ب به یکی از حسابهای پیمان (پ) یک بیتکوین واریز کنن. پیمان وقتی وارد کیف پولش میشه میبینه که ۲ بیتکوین موجودی داره. اما گرههای شبکه هیچ توجهی به اینکه حساب پ چقدر موجودی داره ندارن و فقط تراکنشهای الف و ب رو به صورت مستقل (بدون ارتباط دادنشون با هم) نگهداری میکنن.
زمانی که پیمان تصمیم میگیره این ۲ بیتکوین رو یکجا برای شخص دیگهای ارسال کنه، تراکنشی که باید امضا کنه شامل شناسه تراکنش الف و ب هست و مقداری از سکهها و آدرسی که باید کوینها برای اون ارسال بشن. بنابراین وقتی پیمان میخواد سکههای خودش رو خرج کنه، نمیتونه بگه که من مالک حساب پ هستم و میخوام از موجودی خودم خرج کنم. بلکه باید دقیقا مشخص کنه که بنا به کدوم تراکنشهایی - که هنوز خرجشون نکرده - این مقدار سکه برای من ارسال شده و حالا میخوام اونها رو خرج کنم.
همینطور پیمان حق نداره که فقط بخشی از سکههای یک تراکنش رو خرج کنه و باید همهی سکههای یک تراکنش رو یکجا خرج کنه. مثلا برای ارسال ۱.۵ بیتکوین، باید تراکنشهای الف و ب رو به عنوان ورودی مشخص کنه، مقدار ۱.۵ بیتکوین و آدرس مقصد رو به عنوان خروجی مشخص کنه و همینطور یک آدرس دیگه که متعلق به خودش هست رو با مقدار ۰.۵ بیتکوین به عنوان خروجی قرار بده که باقیموندهی سکهها مجددا به حسابی متعلق به خودش ارسال بشه. (در حقیقت باید مقداری کمتر (مثلا ۰.۴۹ بیتکوین) رو به خودش برگردونه تا مقداری که باقی میمونه و در خروجی تعیین تکلیف نشده، به عنوان کارمزد تراکنش لحاظ بشه)
به این نحوهی عملکرد بیتکوین مدل خروجی تراکنش خرج نشده (Unspent Transaction Output) یا UTXO گفته میشه که میتونه به عنوان ورودی در یک تراکنش جدید خرج بشه. در مقابل رمزارز ایتریوم بر مبنای «حسابها» کار میکنه که اینجا توضیحات بیشتری دادم.
#UXTO #BTC
〽️ @irancoin
فرض کنید علی و حسن هر کدوم با تراکنشهای الف و ب به یکی از حسابهای پیمان (پ) یک بیتکوین واریز کنن. پیمان وقتی وارد کیف پولش میشه میبینه که ۲ بیتکوین موجودی داره. اما گرههای شبکه هیچ توجهی به اینکه حساب پ چقدر موجودی داره ندارن و فقط تراکنشهای الف و ب رو به صورت مستقل (بدون ارتباط دادنشون با هم) نگهداری میکنن.
زمانی که پیمان تصمیم میگیره این ۲ بیتکوین رو یکجا برای شخص دیگهای ارسال کنه، تراکنشی که باید امضا کنه شامل شناسه تراکنش الف و ب هست و مقداری از سکهها و آدرسی که باید کوینها برای اون ارسال بشن. بنابراین وقتی پیمان میخواد سکههای خودش رو خرج کنه، نمیتونه بگه که من مالک حساب پ هستم و میخوام از موجودی خودم خرج کنم. بلکه باید دقیقا مشخص کنه که بنا به کدوم تراکنشهایی - که هنوز خرجشون نکرده - این مقدار سکه برای من ارسال شده و حالا میخوام اونها رو خرج کنم.
همینطور پیمان حق نداره که فقط بخشی از سکههای یک تراکنش رو خرج کنه و باید همهی سکههای یک تراکنش رو یکجا خرج کنه. مثلا برای ارسال ۱.۵ بیتکوین، باید تراکنشهای الف و ب رو به عنوان ورودی مشخص کنه، مقدار ۱.۵ بیتکوین و آدرس مقصد رو به عنوان خروجی مشخص کنه و همینطور یک آدرس دیگه که متعلق به خودش هست رو با مقدار ۰.۵ بیتکوین به عنوان خروجی قرار بده که باقیموندهی سکهها مجددا به حسابی متعلق به خودش ارسال بشه. (در حقیقت باید مقداری کمتر (مثلا ۰.۴۹ بیتکوین) رو به خودش برگردونه تا مقداری که باقی میمونه و در خروجی تعیین تکلیف نشده، به عنوان کارمزد تراکنش لحاظ بشه)
به این نحوهی عملکرد بیتکوین مدل خروجی تراکنش خرج نشده (Unspent Transaction Output) یا UTXO گفته میشه که میتونه به عنوان ورودی در یک تراکنش جدید خرج بشه. در مقابل رمزارز ایتریوم بر مبنای «حسابها» کار میکنه که اینجا توضیحات بیشتری دادم.
#UXTO #BTC
〽️ @irancoin
Telegram
JahaniGram
🔆 اعداد رند
به این تراکنش دقت کنید. مقداری بیتکوین از آدرس اول خارج شده و به دو آدرس دیگه انتقال پیدا کرده. میتونید تشخیص بدید کوینهایی که خرج شده کدوم هست و باقیمونده (چنج) کوینها که به کیف پول شخص برگشته کدومه؟
هرچند قطعی نیست ولی احتمالا مبلغ رند 12 بیتکوین آدرسی هست که پول بهش ارسال شده و آدرس دیگه مربوط به خود شخص ارسال کننده هست که بقیهی کوینهاش رو توی اون دریافت کرده. پس هرجایی که امکانش هست سعی کنید مبلغ رو تا آخرین رقم اعشار به صورت تصادفی وارد کنید تا مشخص نباشه کوینها به چه آدرسی ارسال شده و کدوم آدرس متعلق به شما هست که باقی کوینهاتون رو توی اون دریافت کردید.
همینطور ممکنه مبلغ بیتکوینی رند نباشه ولی معادل دلاری اون مبلغ رندی باشه که بشه تشخیص داد چه عددی کوینهای خرج شده هست.
#Privacy #BTC
〽️ @IranCoin
به این تراکنش دقت کنید. مقداری بیتکوین از آدرس اول خارج شده و به دو آدرس دیگه انتقال پیدا کرده. میتونید تشخیص بدید کوینهایی که خرج شده کدوم هست و باقیمونده (چنج) کوینها که به کیف پول شخص برگشته کدومه؟
هرچند قطعی نیست ولی احتمالا مبلغ رند 12 بیتکوین آدرسی هست که پول بهش ارسال شده و آدرس دیگه مربوط به خود شخص ارسال کننده هست که بقیهی کوینهاش رو توی اون دریافت کرده. پس هرجایی که امکانش هست سعی کنید مبلغ رو تا آخرین رقم اعشار به صورت تصادفی وارد کنید تا مشخص نباشه کوینها به چه آدرسی ارسال شده و کدوم آدرس متعلق به شما هست که باقی کوینهاتون رو توی اون دریافت کردید.
همینطور ممکنه مبلغ بیتکوینی رند نباشه ولی معادل دلاری اون مبلغ رندی باشه که بشه تشخیص داد چه عددی کوینهای خرج شده هست.
#Privacy #BTC
〽️ @IranCoin
🔆 ارسال به آدرس با نوع اسکریپت متفاوت
مجددا از یک آدرس مقداری بیتکوین خرج شده و بخشی هم به عنوان باقی پول به کیف پول شخص در یک آدرس جدید برگشته. میتونید تشخیص بدید کدوم آدرس متعلق به خود فرد ارسال کننده هست؟
مشخصا کیف پول شخص از آدرسهای سگویت که با عدد 3 شروع میشن پشتیبانی میکنه و آدرسی که شخص بقیهی پولش رو در اون دریافت میکنه هم آدرس دوم هست که مجددا با 3 شروع شده. و آدرس که با 1 شروع شده دریافتکننده هست و مبلغ متناظرش هم پولی هست که خرج شده.
#Privacy #BTC
〽️ @IranCoin
مجددا از یک آدرس مقداری بیتکوین خرج شده و بخشی هم به عنوان باقی پول به کیف پول شخص در یک آدرس جدید برگشته. میتونید تشخیص بدید کدوم آدرس متعلق به خود فرد ارسال کننده هست؟
مشخصا کیف پول شخص از آدرسهای سگویت که با عدد 3 شروع میشن پشتیبانی میکنه و آدرسی که شخص بقیهی پولش رو در اون دریافت میکنه هم آدرس دوم هست که مجددا با 3 شروع شده. و آدرس که با 1 شروع شده دریافتکننده هست و مبلغ متناظرش هم پولی هست که خرج شده.
#Privacy #BTC
〽️ @IranCoin
🔆 ورودی تراکنش بیمورد
به مبالغ ورودی و خروجی دقت کنید. ورودیها هر دو بالای یک بیتکوین هستن و یک خروجی ۲ بیتکوین و خروجی دیگه حدود ۰.۳ بیتکوین هست. اگر هدف خرج کردن ۰.۳ بیتکوین بود، قاعدتا یکی از ورودهای یک بیتکوینی برای این تراکنش کافی بود و نیازی به ورودی دوم نبود. اما چون شخص قصد داشته ۲ بیتکوین خرج کنه، کیف پولش مجبور شده از دو تراکنش استفاده کنه.
علاوه بر این نکته، رندم بودن مبلغ خرج شده هم آدرس گیرنده و آدرس چنج فرستنده رو افشا میکنه.
#Privacy #BTC
〽️ @IranCoin
به مبالغ ورودی و خروجی دقت کنید. ورودیها هر دو بالای یک بیتکوین هستن و یک خروجی ۲ بیتکوین و خروجی دیگه حدود ۰.۳ بیتکوین هست. اگر هدف خرج کردن ۰.۳ بیتکوین بود، قاعدتا یکی از ورودهای یک بیتکوینی برای این تراکنش کافی بود و نیازی به ورودی دوم نبود. اما چون شخص قصد داشته ۲ بیتکوین خرج کنه، کیف پولش مجبور شده از دو تراکنش استفاده کنه.
علاوه بر این نکته، رندم بودن مبلغ خرج شده هم آدرس گیرنده و آدرس چنج فرستنده رو افشا میکنه.
#Privacy #BTC
〽️ @IranCoin
🔆 استفاده مجدد اجباری از یک آدرس
برای حفظ حریم خصوصی، باید به هر آدرس بیتکوین فقط یک بار پرداخت انجام بگیره و وقتی که موجودی اون آدرس خرج شد، دیگه هیچ موقع ازش استفاده نشه. اینکار با در نظر گرفتن نحوه انجام تراکنش ها در شبکه بیتکوین، هیچ هزینه اضافی به شخص تحمیل نمیکنه و انجام ندادنش غیر منطقی هست.
ممکنه شخصی که شما رو تحت نظر داره به یکی از آدرسهایی که قبلا ازش استفاده کردید و اون ازش اطلاع داره مقدار کمی بیتکوین ارسال کنه. و کیف پول شما ممکنه بدون اینکه شما متوجه باشید از این مقدار کم در تراکنشهایی که بعدا انجام میدید استفاده کنه. به این ترتیب اون شخص میتونه از جزئیات اون تراکنش شما مطلع بشه.
رفتار صحیح کیف پول در این مورد اینه که از آدرسهایی که قبلا ازشون خرج شده استفاده نکنه.
#Privacy #BTC
〽️ @IranCoin
برای حفظ حریم خصوصی، باید به هر آدرس بیتکوین فقط یک بار پرداخت انجام بگیره و وقتی که موجودی اون آدرس خرج شد، دیگه هیچ موقع ازش استفاده نشه. اینکار با در نظر گرفتن نحوه انجام تراکنش ها در شبکه بیتکوین، هیچ هزینه اضافی به شخص تحمیل نمیکنه و انجام ندادنش غیر منطقی هست.
ممکنه شخصی که شما رو تحت نظر داره به یکی از آدرسهایی که قبلا ازش استفاده کردید و اون ازش اطلاع داره مقدار کمی بیتکوین ارسال کنه. و کیف پول شما ممکنه بدون اینکه شما متوجه باشید از این مقدار کم در تراکنشهایی که بعدا انجام میدید استفاده کنه. به این ترتیب اون شخص میتونه از جزئیات اون تراکنش شما مطلع بشه.
رفتار صحیح کیف پول در این مورد اینه که از آدرسهایی که قبلا ازشون خرج شده استفاده نکنه.
#Privacy #BTC
〽️ @IranCoin
🔆 افشای موجودی فرستنده
فرض کنید که ۱۰۰ بیتکوین رو در یک تراکنش دریافت کردید و حالا قصد دارید مقدار خیلی کمی از اون رو برای یک نوشیدنی خرج کنید. زمانی که این مقدار خیلی کم رو خرج میکنید، چون در آدرس دیگهای پول ندارید، کیف پول شما تراکنشی رو تولید میکنه که ورودی اون ۱۰۰ بیتکوین هست و خروجی اون نزدیک به ۱۰۰ بیتکوینی هست که به آدرس خودتون برمیگرده و مقدار کمی که به فروشنده میرسه و بخشی هم که برای کارمزد تراکنش پرداخت میشه. از روی این تراکنش، فروشنده نوشیدنی میتونه متوجه بشه که شما حداقل ۱۰۰ بیتکوین در کیف پولتون داشتید که باهاش بهای این نوشیدنی رو پرداخت کردید. این موضوع میتونه برای شما ناخوشایند یا در مواردی حتی خطرناک باشه.
در مثال عکس، شخصی معادل حدود یک میلیون تومان پرداختی داشته ولی گیرنده از روی این تراکنش میتونه متوجه بشه که این شخص حداقل حدود ۳۲۰ میلیون تومن در کیف پولش موجودی داره.
#Privacy #BTC
〽️ @IranCoin
فرض کنید که ۱۰۰ بیتکوین رو در یک تراکنش دریافت کردید و حالا قصد دارید مقدار خیلی کمی از اون رو برای یک نوشیدنی خرج کنید. زمانی که این مقدار خیلی کم رو خرج میکنید، چون در آدرس دیگهای پول ندارید، کیف پول شما تراکنشی رو تولید میکنه که ورودی اون ۱۰۰ بیتکوین هست و خروجی اون نزدیک به ۱۰۰ بیتکوینی هست که به آدرس خودتون برمیگرده و مقدار کمی که به فروشنده میرسه و بخشی هم که برای کارمزد تراکنش پرداخت میشه. از روی این تراکنش، فروشنده نوشیدنی میتونه متوجه بشه که شما حداقل ۱۰۰ بیتکوین در کیف پولتون داشتید که باهاش بهای این نوشیدنی رو پرداخت کردید. این موضوع میتونه برای شما ناخوشایند یا در مواردی حتی خطرناک باشه.
در مثال عکس، شخصی معادل حدود یک میلیون تومان پرداختی داشته ولی گیرنده از روی این تراکنش میتونه متوجه بشه که این شخص حداقل حدود ۳۲۰ میلیون تومن در کیف پولش موجودی داره.
#Privacy #BTC
〽️ @IranCoin
🔆 تراکنشهای چند امضایی
اکثر تراکنشهایی که در شبکه بیتکوین انجام میگیرن از نوع تک امضایی هستن. اگه حساب شما چند امضایی (مثلا مشابه عکس ۳ امضا از ۴ امضا) هست، احتمالا مثل یک گاو پیشونی سفید توی شبکه، با هرکسی که تراکنشی انجام میدید یا هرکسی که به نحوی یکی از آدرسهای شما رو به دست میاره، میتونه تاریخچه تراکنشهاتون رو در شبکه تشخیص بده.
#Privacy #BTC
〽️ @IranCoin
اکثر تراکنشهایی که در شبکه بیتکوین انجام میگیرن از نوع تک امضایی هستن. اگه حساب شما چند امضایی (مثلا مشابه عکس ۳ امضا از ۴ امضا) هست، احتمالا مثل یک گاو پیشونی سفید توی شبکه، با هرکسی که تراکنشی انجام میدید یا هرکسی که به نحوی یکی از آدرسهای شما رو به دست میاره، میتونه تاریخچه تراکنشهاتون رو در شبکه تشخیص بده.
#Privacy #BTC
〽️ @IranCoin
میشه #بیتکوین رو توی سه تا توییت به صورت نیمه فنی توضیح داد؟ 👇
🔗 Peyman ⚡️ (@PeymanJahani)
#BTC
〽️ @IranCoin
🔗 Peyman ⚡️ (@PeymanJahani)
#BTC
〽️ @IranCoin
Telegraph
رشته توییتی از @PeymanJahani
1. میشه #بیتکوین رو توی سه تا توییت به صورت نیمه فنی توضیح داد؟ 👇 2. یه سکه مجازی رو در نظر میگیریم که اولش هرکسی تعداد مشخصی ازش داره و همه اینو تو دفتراشون نوشتن. برای فرستادن این سکهها به هم، مقصد و مقدارش رو مشخص میکنیم، امضای دیجیتال میزنیم و این تراکنش…
🔅 تبدیل واحدهای بیتکوین، ساتوشی، تومان و دلار به هم
عددی به بیتکوین، ساتوشی، تومان یا دلار ورودی داده میشه و خروجی رو بر حسب مابقیشون به دست میاد. بر حسب ورودی که ثابت میمونه، مابقی واحدها هر چند ثانیه با قیمتهای جدید به روز میشن.
#BTC 🔗
〽️ @IranCoin
عددی به بیتکوین، ساتوشی، تومان یا دلار ورودی داده میشه و خروجی رو بر حسب مابقیشون به دست میاد. بر حسب ورودی که ثابت میمونه، مابقی واحدها هر چند ثانیه با قیمتهای جدید به روز میشن.
#BTC 🔗
〽️ @IranCoin
ساخت آدرس با یه سری حروف دلخواه رو یه بررسی داشتم، محاسبات انجام ندادم ولی ظاهرا (با توجه به آدرسهایی که ساخته شدن) اگه ۶ کاراکتر رو آزاد بزاریم، مابقی رو میشه دلخواه انتخاب کرد (غیر حرف اول که مثلا ۱ فیکس هست). یه کدی هم براش زدم که امروز بالاخره ازش جواب گرفتم. (۵ کاراکتر رو کد بررسی میکرد، کاراکتر ششم رو هم خودم دستی تغییر میدادم)
#BTC
〽️ @irancoin
# Bitcoin/address ValidationOutput:
# https://rosettacode.org/wiki/Bitcoin/address_validation#Python
from hashlib import sha256
digits58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
def decode_base58(bc, length):
n = 0
for char in bc:
n = n * 58 + digits58.index(char)
return n.to_bytes(length, 'big')
def check_bc(bc):
try:
bcbytes = decode_base58(bc, 25)
return bcbytes[-4:] == sha256(sha256(bcbytes[:-4]).digest()).digest()[:4]
except Exception:
return False
# Valid Address Checker
# https://cointools.org/valid-address-checker/
# My Script
address_length = 34
def check_valid_chars(address):
return set(address) <= set(digits58)
def generate_address(inital_address):
if (len(inital_address)<address_length):
for char in digits58:
new_address = inital_address + char
generate_address(new_address)
else:
check_address(inital_address)
def check_address(address):
if(check_bc(address)):
print(address)
print(check_bc('1AGNa15ZQXAZUgFiqJ3i7Z2DPU2J6hW62a')) # False Address
print(check_bc('17NdbrSGoUotzeGCcMMCqnFkEvLymoou9j')) # True Address
print(check_bc('1WhyHaveYouDoneThis111111112LuRDJ')) # True Address
# 1WhyHaveYouDoneThis111111112LuRDJ
# 1AnywayBTCinNotAProof2111112kC2W3
# 1isBTCsentWhatMatters1111113DCY25
# 1HiFromFinanciaLEngineers111zKsxt
# 1Peyman1111111111111111111116Ed7aU
address = '1Peyman111111111111111111111611111' # Desired Address Format
initial_address = address[:-5] # Remove 5 chars from address
print(initial_address)
if (check_valid_chars(initial_address)):
generate_address(initial_address)
else:
print('Wrong Characters in address format')
print('END')
False
True
True
1Peyman1111111111111111111116
1Peyman1111111111111111111116Ed7aU
END
#BTC
〽️ @irancoin