1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/anycmd-tlang

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Tlang

Tlang — это язык программирования класса Lisp, предназначенный для удаления виртуальной машины из блокчейна.

Виртуальная машина в блокчейне не является необходимой, поэтому можно использовать интерпретируемую форму выполнения tlang для выражения смарт-контрактов и предоставлять стандартные шаблоны транзакций. Обычные транзакции выполняются с использованием шаблонов транзакций, а сложные логические транзакции могут быть выражены разработчиками приложений на языке tlang (также можно использовать SDK для языков Java, .NET, JavaScript, Go и т. д., программы, написанные с помощью SDK, будут автоматически переведены на tlang).

Пример

Ниже приведён пример логики контракта, написанной на tlang.

Логика этого контракта заключается в том, что если вы хотите, чтобы результат выполнения контракта был истинным, то необходимо знать мой день рождения 23 июня 2017 года или предоставить pubKey и подпись, соответствующую этому ключу, для этой транзакции.

Чтобы сделать результат контракта истинным, вызывающий объект должен предоставить правильные данные: день рождения, pubKey и sign.

Данные, предоставленные вызывающей стороной:

(define birthDay "{birthDay}")
(define pubKey "{pubKey}")
(define sign "{sign}")

Приведённые выше пары ключ-значение поступают от вызывающего объекта, данные представляют собой пары ключ-значение, которые добавляются непосредственно в область действия во время выполнения без необходимости объединения кода, что исключает возможность внедрения кода.

Ниже приведены три строки логики смарт-контракта, которые являются статическими и не могут быть изменены вызывающим объектом.

Логика, определённая разработчиком контракта:

(define pubKeyHash="8658cefd0c1cf0ff294d14a66278f5a5490a1f8e")
(define myBirthDayHash="d4a0f6c5b4bcbf2f5830eabed3daa7304fb794d6")
(or 
	(= (hash160 birthDay) myBirthDayHash) 
	(and 
		(= (hash160 pubKey) pubKeyHash) 
		(= (decrypt pubKey sign) txHash)))

Функции and = hash160 или decrypt являются системными функциями, txHash или txId — это хэш текущей записи транзакции.

Если предоставляется функция checksig, то выражение (= (decrypt pubKey sign) txHash) также может быть записано как (checksig pubKey sign txHash).

PS: Кстати, этот пример не очень хорош, потому что день рождения можно перебрать, начиная с сегодняшнего дня и двигаясь назад на 100 лет, вычисляя хэш каждого дня и сравнивая его с myBirthDayHash, тогда можно будет забрать активы, заблокированные этим контрактом.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это язык программирования, основанный на языке Yin и реализованный на Java, который был переведён в реализацию .NET. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/anycmd-tlang.git
git@api.gitlife.ru:oschina-mirror/anycmd-tlang.git
oschina-mirror
anycmd-tlang
anycmd-tlang
master